Text
This commit is contained in:
parent
0125f9cbee
commit
80287870a3
14
wiki/Latex/Висячие строки.md
Normal file
14
wiki/Latex/Висячие строки.md
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
title: "LaTeX: висячие строки"
|
||||
category: LaTeX
|
||||
tags: LaTeX, текст
|
||||
summary:
|
||||
...
|
||||
|
||||
Пакет [`nowidow`](https://www.ctan.org/pkg/nowidow) используется для
|
||||
изменения алгоритма размещения висячих строк. Пример:
|
||||
|
||||
```latex
|
||||
\usepackage[defaultlines=3,all]{nowidow}
|
||||
```
|
||||
|
15
wiki/Latex/Защита команд.md
Normal file
15
wiki/Latex/Защита команд.md
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "LaTeX: защита команд"
|
||||
category: LaTeX
|
||||
tags: LaTeX, текст
|
||||
summary:
|
||||
...
|
||||
|
||||
Команда `\protect` используется для защиты инструкций внутри
|
||||
хрупких команд. Например, для защиты команды переноса строки
|
||||
внутри команды `section` нужно написать:
|
||||
|
||||
```latex
|
||||
\section{Первая строка\protect\\Вторая строка}
|
||||
```
|
||||
|
14
wiki/Latex/Лигатуры.md
Normal file
14
wiki/Latex/Лигатуры.md
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
title: "LaTeX: лигатуры"
|
||||
category: LaTeX
|
||||
tags: LaTeX, шрифты
|
||||
summary:
|
||||
...
|
||||
|
||||
Команды для запрета использования лигатур:
|
||||
|
||||
```latex
|
||||
\usepackage{microtype}
|
||||
\DisableLigatures[f]{encoding = *, family = *}
|
||||
```
|
||||
|
32
wiki/Latex/Многостраничные таблицы в LyX.md
Normal file
32
wiki/Latex/Многостраничные таблицы в LyX.md
Normal file
@ -0,0 +1,32 @@
|
||||
---
|
||||
title: "LyX: многостраничные таблицы"
|
||||
category: LaTeX
|
||||
tags: LaTeX, текст, LyX, таблицы
|
||||
summary:
|
||||
...
|
||||
|
||||
- Создать таблицу как минимум с четырьмя строками.
|
||||
- Щелкнуть правой кнопкой мыши на таблице, выбрать во всплывающем
|
||||
меню **Длинная таблица**.
|
||||
- Щелкнуть правой кнопкой мыши на таблице, выбрать во всплывающем
|
||||
меню **Настройки**.
|
||||
- Установить курсор на первой строке таблицы, в окне настроек перейти
|
||||
на вкладку **Длинная таблица**.
|
||||
- Выбрать **Подпись** и **Первый заголовок**.
|
||||
- Нажать **Применить**.
|
||||
- Установить курсор на второй строке таблицы, в окне настроек перейти
|
||||
на вкладку **Длинная таблица**.
|
||||
- Выбрать **Подпись** и **Заголовок**.
|
||||
- Нажать **Применить**.
|
||||
- Установить курсор на третьей строке таблицы, в окне настроек перейти
|
||||
на вкладку **Длинная таблица**.
|
||||
- Выбрать **Заголовок** и **Первый заколовок**.
|
||||
- Нажать **Применить**.
|
||||
- Щелкнуть правой кнопкой мыши на второй строке таблицы, выбрать в меню
|
||||
**Подпись (Ненумерованный)**.
|
||||
- На первой строке таблицы установить метку и ввести текст подписи к
|
||||
таблице на начальной странице.
|
||||
- На второй строке таблицы сформировать текст подписи к таблице,
|
||||
который будет использоваться на последующих страницах.
|
||||
- На третьей строке нужно сформировать заголовок таблицы.
|
||||
|
11
wiki/Latex/Переносы.md
Normal file
11
wiki/Latex/Переносы.md
Normal file
@ -0,0 +1,11 @@
|
||||
---
|
||||
title: "LaTeX: переносы строк"
|
||||
category: LaTeX
|
||||
tags: LaTeX, текст
|
||||
summary:
|
||||
...
|
||||
|
||||
Текст между командами `\sloppy` и `\fussy` или внутри блока
|
||||
`\begin{sloppypar} ... \end{sloppypar}` будет переноситься
|
||||
сразу при достижении края бокса.
|
||||
|
19
wiki/Latex/Русский в PDF.md
Normal file
19
wiki/Latex/Русский в PDF.md
Normal file
@ -0,0 +1,19 @@
|
||||
---
|
||||
title: "LaTeX: русский язык в выходном PDF"
|
||||
category: LaTeX
|
||||
tags: LaTeX, текст, PDF
|
||||
summary:
|
||||
...
|
||||
|
||||
Для поиска в файле PDF и копирования текста с правильной кодировкой
|
||||
нужно использовать пакет [`cmap`](https://www.ctan.org/pkg/cmap).
|
||||
Включать использование пакета нужно как можно раньше, чтобы правильно
|
||||
формировалась служебная информация и титульные листы.
|
||||
|
||||
```latex
|
||||
\usepackage{cmap}
|
||||
```
|
||||
|
||||
Полезная [информация](http://s.arboreus.com/2007/07/pdf-latex.html)
|
||||
о выводе из $\LaTeX$ в PDF.
|
||||
|
12
wiki/Linux/DPKG/APT.md
Normal file
12
wiki/Linux/DPKG/APT.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
title: "APT"
|
||||
category: Linux
|
||||
tags: linux, ubuntu, debian, apt
|
||||
summary: ""
|
||||
...
|
||||
|
||||
Запрет загрузки переводов описаний пакетов:
|
||||
|
||||
```sh
|
||||
echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/99translations
|
||||
```
|
17
wiki/Linux/LXC/DNS в контейнере LXC.md
Normal file
17
wiki/Linux/LXC/DNS в контейнере LXC.md
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "DNS в контейнере LXC"
|
||||
category: Linux
|
||||
tags: lxc, контейнеры, ubuntu, linux, dns
|
||||
summary:
|
||||
...
|
||||
|
||||
В системе Ubuntu 18.04 работающей внутри контейнера LXC по умолчанию
|
||||
не работает разрешение имён. Чтобы использовать DNS-сервер `8.8.8.8`,
|
||||
нужно внутри контейнера выполнить команды:
|
||||
|
||||
```sh
|
||||
sed -i 's/#DNS=/DNS=8.8.8.8/' /etc/systemd/resolved.conf
|
||||
systemctl restart systemd-resolved
|
||||
rm /etc/resolv.conf
|
||||
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
|
||||
```
|
88
wiki/Linux/Runit/runit.md
Normal file
88
wiki/Linux/Runit/runit.md
Normal file
@ -0,0 +1,88 @@
|
||||
---
|
||||
title: runit
|
||||
category: Linux
|
||||
tags: Debian, Ubuntu, Linux, инициализация, runit
|
||||
summary: Система инициализации со встроенными средствами контроля за процессами
|
||||
...
|
||||
|
||||
### Установка
|
||||
|
||||
[runit](http://smarden.org/runit/) — это система инициализации со
|
||||
встроенными средствами контроля за процессами.
|
||||
|
||||
Установка в Ubuntu:
|
||||
|
||||
```sh
|
||||
sudo apt-get install runit runit-systemd
|
||||
```
|
||||
|
||||
### Запуск сервисов от непривилегированного пользователя
|
||||
|
||||
Чтобы разрешить непривилегированному пользователю `user` управлять
|
||||
собственной конфигурацией для runit, нужно с правами суперпользователя
|
||||
выполнить:
|
||||
|
||||
```sh
|
||||
mkdir -p /etc/service/run-user/supervise
|
||||
cat > /etc/service/run-user/run << EOF
|
||||
#!/bin/sh
|
||||
|
||||
exec 2>&1
|
||||
exec chpst -u user runsvdir /home/user/sv
|
||||
EOF
|
||||
chmod +x /etc/service/run-user/run
|
||||
```
|
||||
|
||||
В результате в каталоге `/home/user/sv` пользователь `user` сможет
|
||||
создавать собственные правила управления сервисами.
|
||||
|
||||
### Пример сервиса
|
||||
|
||||
Для запуска сервера Redis пользователем `user` нужно создать файл
|
||||
конфигурации `/home/user/redis/etc/redis.conf`:
|
||||
|
||||
```
|
||||
daemonize no
|
||||
port 5079
|
||||
tcp-backlog 128
|
||||
timeout 0
|
||||
tcp-keepalive 60
|
||||
loglevel warning
|
||||
databases 1
|
||||
save 300 10
|
||||
dir /home/user/redis/var
|
||||
dbfilename surok.rdb
|
||||
client-output-buffer-limit normal 0 0 0
|
||||
client-output-buffer-limit slave 4mb 1mb 60
|
||||
client-output-buffer-limit pubsub 4mb 1mb 60
|
||||
maxclients 50
|
||||
```
|
||||
|
||||
Запускаемый сервер должен запускаться не в фоновом режиме, чтобы
|
||||
runit мог контролировать его состояние.
|
||||
|
||||
Скрипт `/home/user/sv/redis/run`, который `runit` использует для
|
||||
запуска процесса:
|
||||
|
||||
```sh
|
||||
#!/bin/sh
|
||||
|
||||
WORKDIR=/home/user/redis
|
||||
|
||||
cd "${WORKDIR}" || exit 1
|
||||
exec 2>&1
|
||||
exec redis-server etc/redis.conf
|
||||
```
|
||||
|
||||
Журналирование выполняется с помощью входящей в состав пакета
|
||||
runit программы `svlogd`. Скрипт для его запуска должен находиться
|
||||
в подкаталоге `log` (`/home/user/sv/redis/log/run`):
|
||||
|
||||
```sh
|
||||
#!/bin/sh -e
|
||||
|
||||
LOGDIR=/home/user/redis/log
|
||||
|
||||
mkdir -p "${LOGDIR}"
|
||||
exec svlogd -tt "${LOGDIR}""
|
||||
```
|
30
wiki/Misc/Libgen.md
Normal file
30
wiki/Misc/Libgen.md
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
title: "Libgen: локальная база данных для Windows"
|
||||
category: Windows
|
||||
tags: windows, libgen, библиотеки, книги
|
||||
summary:
|
||||
...
|
||||
|
||||
Программа [LibGen - Библиотекарь](http://libruslib.ucoz.com/index/libgen_bibliotekar/0-5)
|
||||
позволяет просматривать локальную копию базы данных сервера [Libgen](http://libgen.io/).
|
||||
Архив базы данных можно скачать [здесь](http://gen.lib.rus.ec/dbdumps/).
|
||||
В архиве базы с именем вида `libgen_YYYY-MM-DD.rar` содержится полная информация
|
||||
для полнотекстового поиска по описаниям книг, а в архиве с именем вида
|
||||
`libgen-compact_YYYY-MM-DD.rar` описания удалены.
|
||||
|
||||
Для обработки полного архива потребуется около 25 Гб свободного пространства.
|
||||
Последовательность действий:
|
||||
|
||||
1. [Скачать](https://yadi.sk/d/j_ToPE7D3SHGN6) и распаковать программу Libgen.
|
||||
2. Скачать архив базы данных, распаковать его в каталог `upload`
|
||||
и переименовать SQL-скрипт в `backup_ba.sql`.
|
||||
3. [Скачать](https://yadi.sk/d/psnuXFJM3SHGR8) архив со скриптами для преобразования
|
||||
базы данных и распаковать его в каталог `upload`.
|
||||
4. Запустить программу `libgen.exe`.
|
||||
5. Выбрать в меню **Databases | Update book database**.
|
||||
6. Убрать галочки **Download from the Internet** и **Unpack** и поставить
|
||||
**Prepare for import to the database**.
|
||||
7. Нажать кнопку **Start**.
|
||||
8. После завершения работы нажать кнопку **Done**.
|
||||
9. Удалить из каталога `upload` файл `backup_ba1.sql`.
|
||||
|
@ -10,7 +10,7 @@ toc: yes
|
||||
|
||||
### Информация и лицензия
|
||||
|
||||
[PVS-Studio](https://www.viva64.com/ru/pvs-studio/) - это инструмент для
|
||||
[PVS-Studio](https://www.viva64.com/ru/pvs-studio/) — это инструмент для
|
||||
статического анализа исходного кода программ, написанных на языках С, C++.
|
||||
|
||||
Для использования в Linux нужно чтобы в каталоге `~/.config/PVS-Studio`
|
||||
@ -23,7 +23,7 @@ toc: yes
|
||||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
```
|
||||
|
||||
### Настройка и комплияция проекта
|
||||
### Настройка и компиляция проекта
|
||||
|
||||
Полное руководство для работы в Linux находится
|
||||
[здесь](https://www.viva64.com/ru/m/0036/), а ниже приведён список типовых команд.
|
||||
@ -68,7 +68,7 @@ ninja -t compdb
|
||||
|
||||
Выбор типов предупреждений осуществляется на основе побитовой маски из
|
||||
приведенных выше типов. Чтобы выполнить анализ, исключив проверки MISRA,
|
||||
нужно выполнить:
|
||||
нужно выполнить
|
||||
|
||||
```sh
|
||||
pvs-studio-analyzer analyze -a 29 -j$(nproc) -o pvs.log
|
35
wiki/Prog/Development/Подбор ключей компиляции GCC.md
Normal file
35
wiki/Prog/Development/Подбор ключей компиляции GCC.md
Normal file
@ -0,0 +1,35 @@
|
||||
---
|
||||
title: Подбор ключей компиляции GCC
|
||||
category: Программирование
|
||||
tags: программирование, C, C++, отладка, оптимизация
|
||||
summary:
|
||||
...
|
||||
|
||||
Подбор ключей компиляции основан на измерениях характеристик во
|
||||
время выполнения программы. На первом этапе создаётся исполняемый
|
||||
файл `program`, в который включается информация для профилировки.
|
||||
Ключ `-fprofile-generate=data/pgo` указывает, что нужно собирать
|
||||
информацию и сохранять в каталог `data/pgo`. Компиляцию следует
|
||||
выполнять в последовательном режиме.
|
||||
|
||||
```sh
|
||||
env CXXFLAGS='-fprofile-generate=data/pgo' cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles"
|
||||
make -j1
|
||||
```
|
||||
|
||||
После компиляцию программу следует выполнить, придерживаясь
|
||||
типичного сценария использования.
|
||||
|
||||
```sh
|
||||
./program
|
||||
```
|
||||
|
||||
Скомпилировать программу с использованием полученной статистики.
|
||||
Для многопоточной программы следует указать флаг `-fprofile-correction`,
|
||||
чтобы скорректировать данные, которые могут неустойчивыми из-за пропусков
|
||||
обновлений счётчиков. Компиляцию следует выполнять в последовательном режиме.
|
||||
|
||||
```sh
|
||||
env CXXFLAGS='-fprofile-use=data/pgo -fprofile-correction' cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles"
|
||||
make -j1
|
||||
```
|
55
wiki/Prog/Development/Профилирование кода.md
Normal file
55
wiki/Prog/Development/Профилирование кода.md
Normal file
@ -0,0 +1,55 @@
|
||||
---
|
||||
title: Профилирование кода
|
||||
category: Программирование
|
||||
tags: программирование, отладка, производительность, профилирование, gprof
|
||||
summary:
|
||||
...
|
||||
|
||||
## Общее описание
|
||||
|
||||
Чтобы профилировать приложения, компилируемые [GCC](http://gcc.gnu.org),
|
||||
необходимо добавлять флаг `-fno-omit-frame-pointer` и желательно `-g`.
|
||||
|
||||
## quickstack
|
||||
|
||||
Утилита для отслеживания стеков вызовов функций [quicktrack](https://github.com/yoshinorim/quickstack).
|
||||
Пример использования:
|
||||
|
||||
```sh
|
||||
quickstack -f -p $(pidof application)
|
||||
```
|
||||
|
||||
## perf
|
||||
|
||||
Утилита профилирования для ядра Linux (находится в дереве его исходных текстов
|
||||
в каталоге `tools/perf`).
|
||||
|
||||
Полезные ссылки:
|
||||
|
||||
* [Официальная страница](https://perf.wiki.kernel.org/index.php/Main_Page)
|
||||
* [Примеры](https://stackoverflow.com/questions/1777556/alternatives-to-gprof/10958510#10958510)
|
||||
* [Примеры](http://www.brendangregg.com/perf.html)
|
||||
|
||||
|
||||
## Systemtap
|
||||
|
||||
[Установка и простые примеры использования SystemTap](https://eax.me/systemtap/)
|
||||
|
||||
|
||||
## Valgrind
|
||||
|
||||
|
||||
## gperftools
|
||||
|
||||
|
||||
## Разное
|
||||
|
||||
* [Профилирование кода на C/C++ в Linux и FreeBSD](https://eax.me/c-cpp-profiling/)
|
||||
* [Примеры](http://gernotklingler.com/blog/gprof-valgrind-gperftools-evaluation-tools-application-level-cpu-profiling-linux/)
|
||||
|
||||
|
||||
## Графическое отображение
|
||||
|
||||
* [Flame Graphs](http://www.brendangregg.com/flamegraphs.html)
|
||||
* [gprof2dot](https://github.com/jrfonseca/gprof2dot)
|
||||
|
@ -6,7 +6,8 @@ summary: ""
|
||||
...
|
||||
|
||||
|
||||
1) В главном меню QGis **Слой** - **Добавить слой** - **Добавить векторный слой** выбрать и открыть файл с векторным слоем, например, `map.sxf`.
|
||||
1) В главном меню QGis **Слой** — **Добавить слой** — **Добавить векторный слой**
|
||||
выбрать и открыть файл с векторным слоем, например, `map.sxf`.
|
||||
|
||||
2) Среди слоёв выбрать слой с рельефом местности и типом геометрии `LineString`.
|
||||
|
||||
@ -19,26 +20,29 @@ summary: ""
|
||||
`"CLNAME" ILIKE '%ГОРИЗОНТАЛИ ОСНОВ%'` и нажить **OK**.
|
||||
|
||||
5) На панели **Панель слоёв** правой кнопкой мыши щелкнуть на слое,
|
||||
содержащем данные о высотах, и выбрать **Сохранить как...**. Появишийся новый
|
||||
слой **heights** следует удалить.
|
||||
содержащем данные о высотах, и выбрать **Сохранить как...**. Появившийся
|
||||
новый слой **heights** следует удалить.
|
||||
|
||||
6) В появившемся диалоговом окне выбрать имя выходного файла, например, `heights`.
|
||||
|
||||
![Имя выходного файла](files/qgis-heights2.png)
|
||||
|
||||
7) В каталоге `/home/a/work/map` выполнить команду, которая в файле `heights.shp` из слоя `heights` берёт данные о высотах из
|
||||
поля `SC_4` и генерирует матрицу высот размером 2000 на 2000 в формате BMP.
|
||||
7) В каталоге `/home/a/work/map` выполнить команду, которая в файле
|
||||
`heights.shp` из слоя `heights` берёт данные о высотах из поля `SC_4`
|
||||
и генерирует матрицу высот размером 2000 на 2000 в формате BMP.
|
||||
Настойки алгоритма посторения матрицы можно изменять с помощью параметра `-a`:
|
||||
|
||||
```sh
|
||||
gdal_grid -a invdist:power=3.0:smoothing=1.0 -outsize 2000 2000 -of BMP -ot Byte -zfield SC_4 -l heights heights.shp heights.bmp
|
||||
```
|
||||
|
||||
8) После построения матрицы её можно импортировать в QGis как растровый слой, для этого в главном меню QGis **Слой** - **Добавить слой** - **Добавить растровый слой** нужно выбрать и открыть файл `heights.bmp`. В результате на
|
||||
панели **Панель слоёв** появится растровый слой **heights**.
|
||||
8) После построения матрицы её можно импортировать в QGis как растровый
|
||||
слой, для этого в главном меню QGis **Слой** — **Добавить слой** —
|
||||
**Добавить растровый слой** нужно выбрать и открыть файл `heights.bmp`.
|
||||
В результате на панели **Панель слоёв** появится растровый слой **heights**.
|
||||
|
||||
9) С помощью модуля Profile Tool можно построить провиль местности. В главном
|
||||
меню нужно выбрать **Модуль** - **Profile Tool** - **Terrain profile**.
|
||||
9) С помощью модуля Profile Tool можно построить профиль местности. В главном
|
||||
меню нужно выбрать **Модуль** — **Profile Tool** — **Terrain profile**.
|
||||
|
||||
10) На панели **Панель слоёв** нужно перенести растровый слой **heights**
|
||||
в конец списка, выделить его и на панели **Profile Tool** нажать **Add Layer**.
|
||||
|
@ -11,13 +11,18 @@ summary: ""
|
||||
Если нужно следить за каталогом `/home/user/dir` и записывать историю
|
||||
изменений в `/home/user/repo/dir`, то нужно инициализировать репозиторий:
|
||||
|
||||
git init --bare /home/user/repo/dir
|
||||
```sh
|
||||
git init --bare /home/user/repo/dir
|
||||
```
|
||||
|
||||
добавить шаблоны исключаемых файлов
|
||||
добавить шаблоны исключаемых файлов:
|
||||
|
||||
printf '*.[oa]\n*.swp\n*~\n/.git' >> /home/user/repo/dir/info/exclude
|
||||
```sh
|
||||
printf '*.[oa]\n*.swp\n*~\n/.git' >> /home/user/repo/dir/info/exclude
|
||||
```
|
||||
|
||||
и запустить скрипт
|
||||
|
||||
./gitwatch.sh -g /home/user/repo/dir /home/user/dir
|
||||
и запустить скрипт:
|
||||
|
||||
```sh
|
||||
./gitwatch.sh -g /home/user/repo/dir /home/user/dir
|
||||
```
|
||||
|
@ -5,7 +5,7 @@ tags: программирование, git
|
||||
summary:
|
||||
...
|
||||
|
||||
Создание репозитория для нового проекта
|
||||
Создание репозитория для нового проекта:
|
||||
|
||||
```sh
|
||||
ln -s /media/user/usbdisk/git /home/user/work/usbdisk/git
|
||||
@ -13,10 +13,10 @@ git --bare init /home/user/work/usbdisk/git/project.git
|
||||
cd /home/user/work/projects
|
||||
git clone /home/user/work/usbdisk/git/project.git
|
||||
cd project
|
||||
git remote set-url origin file:///home/user/work/usbdisk/git/project.git/
|
||||
git remote set-url usb file:///home/user/work/usbdisk/git/project.git/
|
||||
```
|
||||
|
||||
Добавление нового удалённого репозитория к существующему проекту
|
||||
Добавление нового удалённого репозитория к существующему проекту:
|
||||
|
||||
```sh
|
||||
ln -s /media/user/usbdisk/git /home/user/work/usbdisk/git
|
||||
|
@ -10,8 +10,8 @@ summary: ""
|
||||
Допустим, по адресу `git://localhost/project.git` находится
|
||||
большой проект, в котором интересует только последнее
|
||||
состояние каталогов `src/driver` и `include/driver`.
|
||||
Сначала нужно создать репозиторий и подготовить его для
|
||||
получения только необходимых файлов:
|
||||
Сначала нужно создать пустой репозиторий и подготовить его
|
||||
для получения только необходимых файлов:
|
||||
|
||||
```sh
|
||||
git init project
|
||||
@ -26,4 +26,6 @@ echo "include/driver/*" >> .git/info/sparse-checkout
|
||||
а, добавив ключ `--depth=1`, указать, что синхронизироваться
|
||||
должно только текущее состояние файлов без учёта истории.
|
||||
|
||||
git pull --depth=1 origin master
|
||||
```sh
|
||||
git pull --depth=1 origin master
|
||||
```
|
||||
|
24
wiki/Prog/Git/Gitlab выполнение по расписанию.md
Normal file
24
wiki/Prog/Git/Gitlab выполнение по расписанию.md
Normal file
@ -0,0 +1,24 @@
|
||||
---
|
||||
title: "GitLab — выполнение по расписанию"
|
||||
category: Программирование
|
||||
tags: программирование, gitlab, git
|
||||
summary:
|
||||
...
|
||||
|
||||
После помещения изменений (push) на сервер следует выполнять только задачи,
|
||||
не требующие много ресурсов. Ресурсоёмкие задачи можно отложить на время
|
||||
минимальной нагрузки сервера. Для этого нужно:
|
||||
|
||||
* в секциях файла `.gitlab-ci.yml`, запускающих задачи с высокой нагрузкой,
|
||||
добавить
|
||||
|
||||
```yaml
|
||||
only:
|
||||
- schedules
|
||||
```
|
||||
|
||||
подробнее это описано [здесь](https://docs.gitlab.com/ee/ci/yaml/#only-and-except-simplified)
|
||||
|
||||
* в веб-интерфейсе в меню **CI/CD** / **Расписания** добавить **Новое расписание**
|
||||
и назначить исполнение задачи на время, когда нагрузка на сервер минимальна.
|
||||
|
@ -8,7 +8,7 @@ toc: yes
|
||||
|
||||
[TOC]
|
||||
|
||||
Установка вылолняется в операционной системе Ubuntu Bionic.
|
||||
Установка выполняется в операционной системе Ubuntu Bionic.
|
||||
|
||||
### LXC
|
||||
|
||||
@ -139,7 +139,6 @@ cat /etc/docker/daemon.json
|
||||
}
|
||||
|
||||
|
||||
|
||||
### Ссылки
|
||||
|
||||
* [GitLab Runner](https://docs.gitlab.com/runner/register/index.html)
|
||||
|
1181
wiki/Prog/Lang/CPP/Проверка именования в Clang Tidy.md
Normal file
1181
wiki/Prog/Lang/CPP/Проверка именования в Clang Tidy.md
Normal file
File diff suppressed because it is too large
Load Diff
28
wiki/Prog/Links/Библиотеки C CPP.md
Normal file
28
wiki/Prog/Links/Библиотеки C CPP.md
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
title: "Библиотеки для C, C++"
|
||||
category: Программирование
|
||||
tags: программирование, C, C++, Qt
|
||||
summary:
|
||||
toc: yes
|
||||
...
|
||||
|
||||
[TOC]
|
||||
|
||||
### C
|
||||
|
||||
* [nanomsg](http://nanomsg.org): сетевое взаимодействие
|
||||
* [noping](https://noping.cc): работа с ICMP-пакетами
|
||||
* [openblas](https://github.com/xianyi/OpenBLAS): оптимизированная версия
|
||||
[BLAS](https://ru.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms)
|
||||
|
||||
### C++
|
||||
|
||||
* [JSON](https://github.com/nlohmann/json)
|
||||
* [fmtlib](https://github.com/fmtlib/fmt): форматирование строк
|
||||
* [spdlog](https://github.com/gabime/spdlog): журналирование
|
||||
* [cpptoml](https://github.com/skystrife/cpptoml): чтение [TOML](https://github.com/toml-lang/toml)
|
||||
|
||||
|
||||
### Qt
|
||||
|
||||
* [Обработка сигналов UNIX](https://github.com/sjinks/qt_signalwatcher)
|
159
wiki/Prog/Time/Работа с датами и временем.md
Normal file
159
wiki/Prog/Time/Работа с датами и временем.md
Normal file
@ -0,0 +1,159 @@
|
||||
---
|
||||
title: Работа с датами и временем
|
||||
category: Программирование
|
||||
tags: программирование, время, часы, дата
|
||||
summary:
|
||||
toc: yes
|
||||
toc-depth: 4
|
||||
...
|
||||
|
||||
[TOC]
|
||||
|
||||
### Временные шкалы
|
||||
|
||||
В идеале системы учёта времени должны обладать тремя характеристиками:
|
||||
|
||||
1. _точность_ (время базируется на атомном стандарте, каждая секунда
|
||||
отсчитывается как секунда в системе СИ, нет високосных секунд, переводов
|
||||
на зимнее или летнее время и т.п.);
|
||||
2. _простота_ (каждый "день" состоит из 86400 "секунд");
|
||||
3. _календарные дни_ (дни календаря точно соответствуют вращению Земли).
|
||||
|
||||
На практике есть возможность выбрать шкалу только с двумя характеристиками
|
||||
из трёх.
|
||||
|
||||
1. точность и календарные дни. Примером такой шкалы является UTC,
|
||||
в которой отсчёт дней и секунд ведётся разными методами (секунды
|
||||
исчисляются по атомному стандарту, а дни по суточному вращению Земли),
|
||||
а соответствие достигается вводом _секунды координации_;
|
||||
|
||||
2. календарные дни и простота. Примером такой шкалы является POSIX
|
||||
(IEEE Std 1003.1-1988), в которой день всегда равен 86400 секундам;
|
||||
|
||||
3. точность и простота. Этими характеристиками обладают технические
|
||||
шкалы (атомные часы, GPS), в которых не важен учёт дней.
|
||||
|
||||
|
||||
### Классы времени
|
||||
|
||||
Время можно условно поделить на два класса: физическое и гражданское.
|
||||
|
||||
1. _Физическое_ время представляет собой точки на непрерывной шкале, такую
|
||||
концепцию достаточно точно отражает UTC, если можно пренебречь _секундой
|
||||
координации_ (дополнительная секунда, добавляемая к UTC 30 июня или 31 декабря
|
||||
для согласования со средним солнечным временем UT1. В этот момент время
|
||||
условно обозначается как 23:59:60, а на шкале UTC две секунды отображаются
|
||||
как одна).
|
||||
|
||||
2. _Гражданское_ время представляется полями (год, месяц, число, час, минута,
|
||||
секунда, доли секунды, а также временная зона и календарь, который по умолчанию
|
||||
считается Григорианским).
|
||||
|
||||
Почти всегда существует возможность однозначно перевести физическое время
|
||||
в гражданское и наоборот, но при этом следует различать их свойства и
|
||||
применение (ближайшая аналогия — массивы байтов и символьные строки).
|
||||
|
||||
Основная проблема состоит в том, что в обычном употреблении не всегда можно
|
||||
сделать вывод о том, какой класс времени подразумевается, и гражданское
|
||||
время меняется на основании юридических актов (указов, постановлений и т.п.),
|
||||
что приводит к неоднозначности при планировании событий.
|
||||
|
||||
### Обработка на компьютере
|
||||
|
||||
#### Хранение и отображение
|
||||
|
||||
Для ссылки на момент во времени необходимо использовать единую шкалу,
|
||||
на которой нет разрывов, связанных с летним временем. Примером стандарта
|
||||
времени с такой шкалой является UTC. Локальное или местное время для таких
|
||||
целей не подходит, так как на его шкале имеются разрывы и неоднозначности,
|
||||
связанные с переходами на летнее время и обратно.
|
||||
|
||||
Если нужно сохранить значение локального времени, то необходимо сохранить
|
||||
также смещение относительно UTC, чтобы временную отметку можно было
|
||||
интерпретировать однозначно. Необходимо помнить, что местное время может
|
||||
отличаться от UTC на интервал не кратный часу (например, в Нидерландах
|
||||
с 1909-05-01 по 1937-06-30 смещение времени от UTC составляло
|
||||
19 минут и 32.13 секунд).
|
||||
|
||||
Правила хранения и отображения времени:
|
||||
|
||||
1. Время всегда хранится в UTC. При необходимости дополнительно сохраняется
|
||||
информация о временной зоне (смещение и/или название).
|
||||
|
||||
2. Для вывода на экран время переводится в местное.
|
||||
|
||||
3. При выводе на экран отличного от местного времени необходимо указывать
|
||||
название часового пояса или типа исчисления (например, Юлианский календарь).
|
||||
|
||||
|
||||
#### Системное время для администратора
|
||||
|
||||
Системный администратор должен следить за тем, чтобы файлы базы данных
|
||||
описания временных зон **tzdata** имели одну версию в рамках комплекса
|
||||
и обновлялись регулярно, чтобы минимизировать расхождения с внешними
|
||||
системами. Особенно это важно делать при издании новых правил учёта
|
||||
зимнего или летнего времени.
|
||||
|
||||
На серверах аппаратные часы всегда должны использовать UTC. Операционные
|
||||
системы тоже должны использовать UTC, чтобы при возникновении проблем
|
||||
в файлах журналов было указано время в едином формате.
|
||||
|
||||
В рамках комплекса следует использовать синхронизацию времени, даже
|
||||
если нет доверенного источника более высокого уровня.
|
||||
|
||||
|
||||
#### Клиентские приложения
|
||||
|
||||
В общем случае нельзя доверять временным отметкам внешних клиентов,
|
||||
так как невозможно гарантировать их корректность. Программа должна
|
||||
самостоятельно ставить временные отметки для происходящих событий.
|
||||
Исключением являются программные комплексы, в которых предусмотрено
|
||||
наличие доверенных приложений, ответственных за установку временных отметок.
|
||||
|
||||
|
||||
#### Postgresql
|
||||
|
||||
Сервер базы данных должен использовать только временную зону UTC. Для этого
|
||||
в файле настройки сервера `postgresql.conf` должна быть строка
|
||||
|
||||
```
|
||||
timezone = 'UTC'
|
||||
```
|
||||
|
||||
При создании таблиц необходимо использовать типы данных `timestamp without time zone`
|
||||
и `time without time zone`. Если данные о времени должны содержать информацию
|
||||
о временной зоне или смещении относительно UTC, то нужно создать дополнительные
|
||||
столбцы, информацию из которых должно обрабатывать клиентское приложение.
|
||||
Например, временные отметки можно хранить в таком виде
|
||||
|
||||
```sql
|
||||
CREATE TABLE time_stamps (
|
||||
time_stamp time without time zone, -- временная отметка
|
||||
time_zone character(12), -- текстовое название временной зоны
|
||||
shift integer -- смещение локального времени относительно UTC в секундах
|
||||
);
|
||||
```
|
||||
|
||||
Смещение следует записывать в четырёхбайтное знаковое целое, так как оно
|
||||
может быть как положительным, так и отрицательным, а его максимальное
|
||||
значение может составлять 14 * 60 * 60 = 50400 секунд. Несмотря на приведённый
|
||||
выше пример с временной зоной Нидерландов, микросекундами можно пренебречь,
|
||||
так как современные временные зоны имеют смещения кратные минутам, а точность
|
||||
до микросекунд в далёком прошлом обычно не требуется.
|
||||
|
||||
Чтобы клиентская программа могла получить выборку, привязанную к некоторой
|
||||
временной зоне можно использовать оператор `AT TIME ZONE`, например
|
||||
|
||||
```sql
|
||||
SELECT TIMESTAMP '2001-02-16 20:38:40Z' AT TIME ZONE 'MSK';
|
||||
```
|
||||
|
||||
В результате время будет преобразовано из временной зоны UTC в MSK.
|
||||
Модификатор `Z` в записи времени указывает на принадлежность зоне UTC.
|
||||
|
||||
|
||||
#### Qt
|
||||
|
||||
Класс `QTimeZone` предназначен для получения информации о временной зоне
|
||||
и перевода времени из одной временной зоны в другую.
|
||||
|
21
wiki/Vim/Vimdiff.md
Normal file
21
wiki/Vim/Vimdiff.md
Normal file
@ -0,0 +1,21 @@
|
||||
---
|
||||
title: Vimdiff
|
||||
category: Vim
|
||||
tags: Vim, команды Vim
|
||||
summary:
|
||||
CSS: table-100.css
|
||||
...
|
||||
|
||||
Команды режима `diff` для сравнения и слияния файлов:
|
||||
|
||||
Команда | Назначение
|
||||
-------------|------------
|
||||
`do` | Получить изменения из второго окна в текущее окно
|
||||
`dp` | Вставить изменения из текущего окна во второе окно
|
||||
`]c` | Перейти к следующему отличию
|
||||
`[c` | Перейти к предыдущему отличию
|
||||
`C-W` `C-W` | Переход между окнами
|
||||
|
||||
[Видеоурок](http://vimcasts.org/episodes/fugitive-vim-resolving-merge-conflicts-with-vimdiff/)
|
||||
по трехпутевому слиянию.
|
||||
|
24
wiki/Vim/Замена выделенного блока.md
Normal file
24
wiki/Vim/Замена выделенного блока.md
Normal file
@ -0,0 +1,24 @@
|
||||
---
|
||||
title: "Vim: замена выделенного блока"
|
||||
category: Vim
|
||||
tags: Vim, команды Vim
|
||||
summary:
|
||||
CSS: table-100.css
|
||||
...
|
||||
|
||||
Замену блока, выделенного в режиме VISUAL, можно выполнить
|
||||
последовательностью команд `y:%s/<ctrl-r>"/заменитель/g`.
|
||||
|
||||
Команда | Назначение
|
||||
---------------|-------------
|
||||
`y` | Копирование в регистр "
|
||||
`:` | Перейти в командный режим
|
||||
`%` | Применить ко всему буферу
|
||||
`s` | Замена
|
||||
`Сtrl-r` | Вставка из регистра
|
||||
`"` | Имя регистра (будет предложено по умолчанию)
|
||||
`/` | Разделитель
|
||||
`заменитель` | Новый текст
|
||||
`/` | Разделитель
|
||||
`g` | Для всех вхождений в строке
|
||||
|
48
wiki/Vim/Клавиши Leader и LocalLeader.md
Normal file
48
wiki/Vim/Клавиши Leader и LocalLeader.md
Normal file
@ -0,0 +1,48 @@
|
||||
---
|
||||
title: "Vim: клавиши Leader и LocalLeader"
|
||||
category: Vim
|
||||
tags: Vim, команды Vim
|
||||
summary:
|
||||
...
|
||||
|
||||
Клавиши `Leader` и `LocalLeader` представляют собой префиксы для команд.
|
||||
Их текущие значения можно посмотреть командами
|
||||
|
||||
```vim
|
||||
:echo mapleader
|
||||
:echo maplocalleader
|
||||
```
|
||||
|
||||
Часто их значения переназначают в файле `$HOME/.vimrc`, например так
|
||||
|
||||
```vim
|
||||
let mapleader = "\<Space>"
|
||||
let maplocalleader = ","
|
||||
```
|
||||
|
||||
Новое значение команды генерируется с помощью текущих значений этих
|
||||
переменных, таким образом последовательность команд
|
||||
|
||||
```vim
|
||||
let mapleader = ","
|
||||
nnoremap <Leader>a :echo "Hey there ,"<CR>
|
||||
|
||||
let mapleader = "\<Space>"
|
||||
nnoremap <Leader>a :echo "Hey there space"<CR>
|
||||
```
|
||||
|
||||
приведёт к тому, что будут созданы две команды `,a` и `<Space>a`,
|
||||
следовательно для получения единообразных команд следует помещать
|
||||
переназначения в начало файла `$HOME/.vimrc`.
|
||||
|
||||
`LocalLeader` отличается от `Leader` тем, что действует только для
|
||||
текущего буфера, поэтому обычно используется в плагинах, загружаемых
|
||||
для определённых типов файлов.
|
||||
|
||||
Таймауты для ввода команд, использующих клавиши `Leader` и
|
||||
`LocalLeader`, настраиваются командой
|
||||
|
||||
```vim
|
||||
set timeout timeoutlen=5000 ttimeoutlen=100
|
||||
```
|
||||
|
22
wiki/Vim/Клавиши PageUp и PageDown.md
Normal file
22
wiki/Vim/Клавиши PageUp и PageDown.md
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
title: "Vim: клавиши PageUp и PageDown"
|
||||
category: Vim
|
||||
tags: Vim, команды Vim
|
||||
summary:
|
||||
...
|
||||
|
||||
Чтобы поведение клавиш `PageUp` и `PageDown` совпадало с более
|
||||
привычным, можно добавить в `$HOME/.vimrc` следующий код:
|
||||
|
||||
```vim
|
||||
" Более привычные PgUp / PgDown, когда курсор остаётся в той же строке, "
|
||||
" а не переносится вверх / вниз экрана, как при стандартном PgUp / PgDown. "
|
||||
" Поскольку по умолчанию прокрутка по C-U / C-D, при которой курсор остаётся
|
||||
" на месте, происходит на полэкрана, привязка делается к двойному нажатию
|
||||
" этих комбинаций. "
|
||||
nmap <PageUp> <C-U><C-U>
|
||||
nmap <PageDown> <C-D><C-D>
|
||||
imap <PageUp> <C-O><C-U><C-O><C-U>
|
||||
imap <PageDown> <C-O><C-D><C-O><C-D>
|
||||
```
|
||||
|
33
wiki/Vim/Кодировка файла.md
Normal file
33
wiki/Vim/Кодировка файла.md
Normal file
@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Vim: кодировка файла"
|
||||
category: Vim
|
||||
tags: Vim
|
||||
summary:
|
||||
...
|
||||
|
||||
Для управления кодировкой файлов можно создать дополнительное меню,
|
||||
позволяющее открыть файл в выбранной кодировке, проверить её
|
||||
корректность и сохранить в нужном виде. Пример кода:
|
||||
|
||||
```vim
|
||||
" кодировка для чтения файла
|
||||
set encoding=utf-8
|
||||
" кодировка терминала
|
||||
set termencoding=utf-8
|
||||
" кодировка для записи файла
|
||||
set fileencoding=utf-8
|
||||
" список предполагаемых кодировок в порядке предпочтения
|
||||
set fileencodings=utf8,koi8r,cp1251,cp866,latin1,ucs-2le
|
||||
|
||||
set wildmenu
|
||||
set wcm=<Tab>
|
||||
menu Encoding.Open\ as\ KOI8-R :e ++enc=koi8-r<CR>
|
||||
menu Encoding.Open\ as\ CP1251 :e ++enc=cp1251<CR>
|
||||
menu Encoding.Open\ as\ CP866 :e ++enc=cp866<CR>
|
||||
menu Encoding.Open\ as\ LATIN1 :e ++enc=latin1<CR>
|
||||
menu Encoding.Open\ as\ UCS-2LE :e ++enc=ucs-2le<CR>
|
||||
menu Encoding.Open\ as\ UTF-8 :e ++enc=utf-8<CR>
|
||||
menu Encoding.Convert\ to\ UTF-8 :set fenc=utf-8<CR>
|
||||
map <F12> :emenu Encoding.<Tab>
|
||||
```
|
||||
|
27
wiki/Vim/Комментирование кода.md
Normal file
27
wiki/Vim/Комментирование кода.md
Normal file
@ -0,0 +1,27 @@
|
||||
---
|
||||
title: "Vim: комментирование кода"
|
||||
category: Vim
|
||||
tags: Vim, команды Vim
|
||||
summary:
|
||||
CSS: table-100.css
|
||||
...
|
||||
|
||||
Отмена автоматического комментирования кода при вставке из буфера:
|
||||
|
||||
```Vim
|
||||
autocmd FileType * setlocal formatoptions-=cro
|
||||
```
|
||||
|
||||
Для управления комментированием можно использовать плагин
|
||||
[NerdCommenter](https://github.com/scrooloose/nerdcommenter).
|
||||
Основные команды:
|
||||
|
||||
Команда | Назначение
|
||||
----------------------|----------------------------
|
||||
`[n]<leader\>cc` | комментировать блок
|
||||
`[n]<leader\>cn` | комментировать с учётом вложенности
|
||||
`[n]<leader\>cl` | символ комментария помещать в начало строки
|
||||
`[n]<leader\>ci` | инвертирование комментариев
|
||||
`<leader\>cA` | добавить комментарий в конец строки
|
||||
`[n]<leader\>cu` | раскомментировать блок
|
||||
|
44
wiki/Vim/Менеджер плагинов Plug.md
Normal file
44
wiki/Vim/Менеджер плагинов Plug.md
Normal file
@ -0,0 +1,44 @@
|
||||
---
|
||||
Title: "Vim: менеджер плагинов Plug"
|
||||
Category: Vim
|
||||
Tags: Vim, плагины Vim
|
||||
Summary:
|
||||
...
|
||||
|
||||
Автоматическое управление плагинами в Vim можно организовать
|
||||
с помощью менеджера [Plug](https://github.com/junegunn/vim-plug),
|
||||
установить который можно командой
|
||||
|
||||
```sh
|
||||
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
|
||||
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
||||
```
|
||||
|
||||
Чтобы использовать Plug, нужно добавить в `$HOME/.vimrc`:
|
||||
|
||||
1. Строку `call plug#begin('~/.vim/plugged')`
|
||||
2. Список строк, начинающихся с команды `Plug`, для загрузки плагинов
|
||||
3. Закончить список командой `call plug#end()`
|
||||
|
||||
Пример:
|
||||
|
||||
```vim
|
||||
" Обязательно использовать одиночные кавычки
|
||||
call plug#begin('~/.vim/plugged')
|
||||
|
||||
" Краткая запись для работы с github: https://github.com/junegunn/vim-easy-align
|
||||
Plug 'junegunn/vim-easy-align'
|
||||
|
||||
" Вариант с полным адресом
|
||||
Plug 'https://github.com/junegunn/vim-github-dashboard.git'
|
||||
|
||||
" Загрузка при выполнении команды
|
||||
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
|
||||
|
||||
" Загрузка для определённого типа файлов
|
||||
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
|
||||
|
||||
" Окончание списка плагинов
|
||||
call plug#end()
|
||||
```
|
||||
|
53
wiki/Vim/Навигация easymotion.md
Normal file
53
wiki/Vim/Навигация easymotion.md
Normal file
@ -0,0 +1,53 @@
|
||||
---
|
||||
title: "Vim: навигация по тексту с помощью easymotion"
|
||||
category: Vim
|
||||
tags: Vim, команды Vim
|
||||
summary:
|
||||
...
|
||||
|
||||
Плагин [easymotion](https://github.com/easymotion/vim-easymotion)
|
||||
предоставляет функции для удобного перемещения по тексту.
|
||||
Пример настройки:
|
||||
|
||||
```vim
|
||||
" Не включать команды по умолчанию
|
||||
let g:EasyMotion_do_mapping = 0
|
||||
|
||||
" Умный регистр
|
||||
let g:EasyMotion_smartcase = 1
|
||||
|
||||
" <Leader>ec{char} для перехода к {char}
|
||||
map <Leader>ec <Plug>(easymotion-bd-f)
|
||||
nmap <Leader>ec <Plug>(easymotion-overwin-f)
|
||||
|
||||
" s{char}{char} для перехода к {char}{char}
|
||||
nmap s <Plug>(easymotion-overwin-f2)
|
||||
|
||||
" Переход к строке
|
||||
map <Leader>eg <Plug>(easymotion-bd-jk)
|
||||
nmap <Leader>eg <Plug>(easymotion-overwin-line)
|
||||
|
||||
" Переход к слову
|
||||
map <Leader>ew <Plug>(easymotion-bd-w)
|
||||
nmap <Leader>ew <Plug>(easymotion-overwin-w)
|
||||
|
||||
" Навигация по строкам
|
||||
map <Leader>el <Plug>(easymotion-lineforward)
|
||||
map <Leader>ej <Plug>(easymotion-j)
|
||||
map <Leader>ek <Plug>(easymotion-k)
|
||||
map <Leader>eh <Plug>(easymotion-linebackward)
|
||||
|
||||
" Повторить последний переход
|
||||
map <Leader>er <Plug>(easymotion-repeat)
|
||||
|
||||
" Замена стандартного поиска по тексту
|
||||
map / <Plug>(easymotion-sn)
|
||||
omap / <Plug>(easymotion-tn)
|
||||
|
||||
" These `n` & `N` mappings are options. You do not have to map `n` & `N` to EasyMotion.
|
||||
" Without these mappings, `n` & `N` works fine. (These mappings just provide
|
||||
" different highlight method and have some other features )
|
||||
map n <Plug>(easymotion-next)
|
||||
map N <Plug>(easymotion-prev)
|
||||
```
|
||||
|
17
wiki/Vim/Навигация по буферам.md
Normal file
17
wiki/Vim/Навигация по буферам.md
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "Vim: навигация по буферам"
|
||||
category: Vim
|
||||
tags: Vim, команды Vim
|
||||
summary:
|
||||
CSS: table-100.css
|
||||
...
|
||||
|
||||
Команда | Назначение
|
||||
------------------|-----------------
|
||||
`:bn` | следующий буфер
|
||||
`:bp` | предыдущий буфер
|
||||
`:ls` | список открытых буферов
|
||||
`:bd` | закрыть текущий буфер
|
||||
`:b имя_буфера` | переключиться на буфер
|
||||
`:bdа имя_буфера` | удалить буфер по имени
|
||||
|
35
wiki/Vim/Нумерация строк.md
Normal file
35
wiki/Vim/Нумерация строк.md
Normal file
@ -0,0 +1,35 @@
|
||||
---
|
||||
title: "Vim: нумерация строк"
|
||||
category: Vim
|
||||
tags: Vim, команды Vim
|
||||
summary:
|
||||
...
|
||||
|
||||
Для переключения режимов отображения слева столбца нумерации
|
||||
строк можно добавить в `$HOME/.vimrc` следующий код:
|
||||
|
||||
```vim
|
||||
" Нумерация строк включена
|
||||
set number
|
||||
" Нумерация строк абсолютная
|
||||
set nornu
|
||||
|
||||
function! ChangeNumbering()
|
||||
if &number
|
||||
if &rnu
|
||||
set nornu
|
||||
else
|
||||
set nonumber
|
||||
endif
|
||||
else
|
||||
set number
|
||||
set rnu
|
||||
endif
|
||||
endfunc
|
||||
|
||||
map <LocalLeader># <Esc>:call ChangeNumbering()<CR>
|
||||
```
|
||||
|
||||
В результате по команде `<LocalLeader>#` будет осуществляться
|
||||
циклическое переключение между абсолютной, относительной нумерацией
|
||||
строк и отключением нумерации.
|
39
wiki/Vim/Проверка орфографии.md
Normal file
39
wiki/Vim/Проверка орфографии.md
Normal file
@ -0,0 +1,39 @@
|
||||
---
|
||||
title: "Vim: проверка орфографии"
|
||||
category: Vim
|
||||
tags: Vim, команды Vim, словарь, орфография
|
||||
summary:
|
||||
...
|
||||
|
||||
Код в `$HOME/.vimrc` для циклического переключения режимов проверки
|
||||
орфографии: два языка, английский, русский и без проверки:
|
||||
|
||||
```Vim
|
||||
" По умолчанию проверка орфографии для русского и английского.
|
||||
setlocal spell spelllang=ru,en
|
||||
set spellsuggest=9
|
||||
|
||||
function! ChangeSpellLang()
|
||||
if &spelllang == "ru,en"
|
||||
setlocal spell spelllang=en
|
||||
echo "spelllang: en"
|
||||
elseif &spelllang == "en"
|
||||
setlocal spell spelllang=ru
|
||||
echo "spelllang: ru"
|
||||
elseif &spelllang == "ru"
|
||||
setlocal nospell spelllang=
|
||||
echo "spelllang: off"
|
||||
else
|
||||
setlocal spell spelllang=ru,en
|
||||
echo "spelllang: ru,en"
|
||||
endif
|
||||
endfunc
|
||||
|
||||
" map spell on/off for English/Russian
|
||||
map <C-F7> <Esc>:call ChangeSpellLang()<CR>
|
||||
|
||||
" выбор альтернатив
|
||||
imap <F7> <Esc> z=<CR>i
|
||||
map <F7> z=<CR>
|
||||
```
|
||||
|
12
wiki/Vim/Ссылки.md
Normal file
12
wiki/Vim/Ссылки.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
title: "Vim: полезные ссылки"
|
||||
category: Vim
|
||||
tags: Vim
|
||||
summary:
|
||||
...
|
||||
|
||||
* [Vim](http://vim.org)
|
||||
* [Usevim](http://usevim.com/)
|
||||
* [How I boosted my Vim](http://nvie.com/posts/how-i-boosted-my-vim/)
|
||||
* [How to boost your Vim productivity](https://sheerun.net/2014/03/21/how-to-boost-your-vim-productivity/)
|
||||
* [Vim Awesome](https://vimawesome.com/)
|
22
wiki/Vim/Управление окнами.md
Normal file
22
wiki/Vim/Управление окнами.md
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
title: "Vim: управление окнами"
|
||||
category: Vim
|
||||
tags: Vim, команды Vim
|
||||
summary:
|
||||
CSS: table-100.css
|
||||
...
|
||||
|
||||
Команда | Назначение
|
||||
--------------------|-------------------------
|
||||
`:split filename` | открыть в новом окне (горизонтальное разделение)
|
||||
`:vsplit filename` | открыть в новом окне (вертикальное разделение)
|
||||
`<C-W>` `<C-W>` | перейти к следующему окну
|
||||
`<C-W>` `q` | закрыть текущее окно
|
||||
`<C-W>` `o` | развернуть окно полностью
|
||||
`<C-W>` `_` | развернуть окно по высоте
|
||||
`<C-W>` `|` | развернуть окно по ширине
|
||||
`<C-W>` `=` | выровнять размер окон
|
||||
`<C-W>` `+` | увеличить окно на 1 строку
|
||||
`<C-W>` `-` | уменьшить окно на 1 строку
|
||||
`<C-W>` `стрелки` | перемещение между окнами
|
||||
|
Loading…
Reference in New Issue
Block a user