summaryrefslogtreecommitdiff
path: root/VIM.md
diff options
context:
space:
mode:
Diffstat (limited to 'VIM.md')
-rw-r--r--VIM.md479
1 files changed, 479 insertions, 0 deletions
diff --git a/VIM.md b/VIM.md
new file mode 100644
index 0000000..c23931c
--- /dev/null
+++ b/VIM.md
@@ -0,0 +1,479 @@
+### Перемещение по экрану ###
+
+`H ( gg )` - в начало экрана
+`M` - в середину экрана
+`L ( G )` - в конец экрана
+`(` - к предыдущему предложению
+`)` - к следующему предложению
+`{` - к предыдущему параграфу
+`}` - к следующему параграфу
+
+### Перемещение по словам в строк ###
+
+В командах `b, e, B, E` - переход зависит от положения курсора в слове.
+
+`w` - в начало следующего слова
+`W` - в начало следующего слова после пробела
+`b` - в начало текущего/предыдущего слова (beginning)
+`B` - в начало текущего/предыдущего слова перед пробелом
+`e` - в конец текущего/следующего слова (end)
+`E` - в конец текущего/следующего слова после пробела
+
+### Перемещение по строкe ###
+
+`0`, `Home` - к началу строки
+`$`, `End` - к концу строки
+`_`, `^` - к первому не пустому символу в строке
+`g_` - к последнему не пустому символу в строке
+`-` - к первому не пустому символу в строке сверху
+`+` - к первому не пустому символу в строке снизу
+`gg` - к первой строке
+`G` - к последней строке
+`ngg` - к строке под номером n (например: 45gg)
+`nG` - к строке под номером n (аналог ngg)
+
+### Перемещение, по символам в строке ###
+
+`%` - к парной скобке вперед по тексту строки `()` `{}` `[]`
+`f` и `X` - к следующему символу `X` в строке (`X` - любой символ)
+`F` и `X` - к следующему символу `X` в строке (обратное направление)
+`t` и `X` - перед символом `X` в строке (`till`)
+`T` и `X` - перед символом `X` в строке (обратное направление) (`till`)
+`;` - повторить переход в прямом направлении
+`,` - повторить переход в обратном направлении
+
+### Поиск в документе ###
+
+- `/Выражение` - поиск текста вперед по документу от курсора
+- `?Выражение` - поиск текста назад по документу от курсора
+`\c` перед `Выражением` - совершит поиск без учета регистра
+
+В режиме поиска искомое слово будет подсвечено.
+Отключить подсветку можно через косоль:
+```
+:nohlsearch
+```
+или поискать несуществующую ерунду ( `/asdfasd`)
+`,` и `пробел` - Отключить подсветку поискового слова
+
+## Ввод текста ###
+`insert mode` - режим редактирования
+
+`a` - добавить текст после курсора
+`i` - добавить текст до курсора
+`A` - добавить текст в конце строки
+`I` - добавить текст в начале строки
+`O` - добавить строку сверху курсора
+`o` - добавить строку снизу курсора
+
+Все эти команды переключают vim в режим редактирования.
+
+`Esc` - _выход_ из режима редактирования
+
+## Выделение ###
+
+`visual mode` - режим выделения текста
+
+`v` - посимвольное выделение текста (visual)
+`V` - построчное выделение текста `v + hjkl` - выделение текста `SHIFT + v` - выделить строку `CTR + v` - выделение прямоугольника `Esc` - _выход_ из режима выделения
+
+### Продвинутое выделение ###
+
+`vip` - выделить параграф
+`viw` - выделить слово
+`Shift+v` или `0v$` - выделить строку
+`^v$` - выделить строку, начиная с первого непробельного символа
+`vi(` - выделить всё между ближайшими круглыми скобками (аналогично `vi\[` и `vi\{` для квадратных и фигурных скобок)
+`va(` - выделить всё между ближайшими круглыми скобками, включая сами скобки
+`v2j` - выделить на две строки вниз
+`dip` - вырезать параграф
+
+### Копирование и вставка ###
+`y`[направление] - копировать символ под курсором по направлению (h, j, k, l, $, 0 и т.п.)
+`yy` - копировать строку
+`"*y` - копировать в системный буфер обмена для вставки в другое приложение (например браузер)
+`p` - вставить после курсора (paste)
+`P` - вставить до курсора
+`gp` - вставить после курсора и переместить курсор на один символ вправо
+`gP` - вставить до курсора и переместить курсор на один символ влево
+
+### Удаление (вырезка) текста ###
+`x`, `DEL` - удалить (вырезать) символ под курсором
+`X` - удалить (вырезать) символ до курсора (аналог backspace)
+`d`[направление] - удалить (вырезать) символы по направлению (h, j, k, l, $, 0 и т.п.)
+`dd` - удалить (вырезать) строку
+`D` - удалить (вырезать) символы от курсора до конца строки
+
+### Изменение и замена текста ###
+
+`J` - объединить строку с нижней (join)
+`r`[символ] - заменить символ под курсором (replace)
+`R` - начать ввод с заменой текста (аналог кнопки insert)
+`s` - заменить символ и начать ввод (substitute)
+`S` - заменить строку и начать ввод
+`c`[направление] - изменить символ по направлению (h, l, e, b и т.п.)
+`C` - изменить строку от курсора до конца (change)
+`~` - сменить регистр символа под курсором
+`gu` - преобразовать в нижний регистр (для изменения - сместите курсор)
+`gU` - преобразовать в верхний регистр (для изменения -сместите курсор)
+
+### Отмена действий ###
+
+`u` - отменить действие (undo) `:u\[ndo\]`
+`U` - отменить все изменения в строке
+`Ctrl+R` - вернуть отменённое действие `:red\[o\]`
+`.` - повторить последнее изменение
+
+### Нумерация строк ###
+`:set number` включить нумерацию строк
+`:set nonumber` отключить нумерацию строк
+
+### Радактирование нескольких файлов ###
+
+Я считаю, что наиболее удобный способ редактирования нескольких файлов - использование вкладок.
+Вы можете открыть несколько файлов на отдельных вкладках через командную строку, например, так:
+
+```
+vim -p file1.txt file2.txt
+```
+
+Или, если у вас уже открыт vim, вы можете открыть новый файл на новой вкладке, например:
+
+```
+:tabe file2.txt
+```
+
+Открыв вкладки, используйте `gt` для просмотра следующей вкладки и `gT` просмотра предыдущей вкладки.
+
+Вы также можете перейти к первой вкладке с помощью `1gt`, второй вкладке с помощью `2gt` и т. д.
+
+Вы можете закрыть вкладки, используя `:tabc`
+
+Наконец, вы можете переместить текущую вкладку в ту `n`-позицию, `:ntabm` где `n` любое число больше или равно 0.
+
+### Файл настройки: ~/.vimrc ###
+```sh
+# Можно редактировать файлы через сеть, например
+:e <scp|ftp|ftps>://user@host/path/to/the/file.txt
+:Ex или :e ./ - файловый менеджер
+
+#== Основы ==
+hjkl                      перемещение в разные стороны
+i                         режим вставки
+I                         добавление в начало строки
+a                         режим добавления
+A                         добавление в конец строки
+o                         добавить строку сразу за текущей
+O                         добавить строку перед текущей
+R                         писать поверх имеющегося текста
+u, :u[ndo]                отмена предыдущего действия (undo)
+CTR-R, :red[o]            отмена отмены предыдущего действия (redo)
+dd                        вырезать (удалить) строку
+cc                        удалить и начать редактирование
+yy                        копировать строку
+p                         вставить из буфера обмена
+<n>d                      удалить n+1 строку
+<n>y                      скопировать n+1 строку
+ESC                       перейти в режим просмотра
+DEL                       удалить следующий символ
+:<n>                      перейти на строку #n
+%                         перейти к парной скобке
+:e **/filename.c          редактировать файл (с поиском по имени)
+:w [fname]                записать изменения
+:wa                       сохранить изменения во всех файлах
+:q                        выйти из редактора
+:q!                       выйти из редактора, не сохраняя изменения
+:color <name>             выбор цветовой схемы. цветвые схемы:
+                            /usr/local/share/vim/vim72/colors/*.vim
+:pwd                      текущий каталог
+:cd [path]                перейти в другой каталог
+:!команда                 выполнить команду - man, git, и так далее
+                            стрелочками веерх и вниз можно автодополнять
+                            команды и искать по истории
+CTR+p или CTR+n           автоматическое дополнение текста
+                            (в режиме редактирования)
+CTR+r,=,<expr>            вставить выражение, например 5*2 - 3
+                            (в режиме редактирования)
+CTR+u, CTR+d              Page Up / Page Down
+CTR+y, CTR+e              Перемотка вверх/вниз без движения курсора              
+
+#== Подсветка синтаксиса ==
+:syntax on                включить подсветку
+:syntax off               выключить подсветку (по умолчанию)
+
+#== Перенос строк ==
+:set wrap                 разрешить word wrap (по умолчанию)
+:set nowrap               запретить word wrap
+
+#== Печать ==
+:ha[rdcopy]                   распечатать документ
+:set printoptions=duplex:off  отключить двустороннюю печать
+
+#== Сворачивание ==
+zc                        свернуть блок
+zo                        развернуть блок
+zM                        закрыть все блоки
+zR                        открыть все блоки
+za                        инвертирование
+zf                        см :set foldmethod=manual
+:set foldenable           включить свoрачивание
+:set foldmethod=syntax    сворачивание на основе синтаксиса
+:set foldmethod=indent    сворачивание на основе отступов
+:set foldmethod=manual    выделяем участок с помощью v и говорим zf
+:set foldmethod=marker    сворачивание на основе маркеров в тексте
+:set foldmarker=bigin,end задаем маркеры начала и конца блока
+
+#== Маркеры ==
+ma                        установить локальный маркер a
+mB                        установить глобальный маркер B
+`c                        перейти к локальному маркеру c
+`0                        вернуться на позицию, на которой закончили
+                            работу при закрытии vim
+:marks                    просмотр маркеров
+set viminfo='1000,f1'      маркеры пишутся в ~/.viminfo, восстанавливаясь
+                            при следующем запуске vim. маркер хранит
+                            последнюю позицию курсора в файле
+#== Сессии ==
+mksession file.session    сохранить текущую сессию
+source file.session       восстановить ранее сохраненную сессию
+
+#== Макросы ==
+qa                        записать макрос с именем a
+q                         в режиме записи макроса: закончить запись
+@a                        выполнить макрос с именем a
+@@                        повторить последний макрос
+
+#== Регистры ==
+ayy                      скопировать строку в регистр a
+bdd                      вырезать строку и поместить в регистр b
+С2d                      вырезать три строки и дописать в конец
+                            регистра C
+:reg [name1][name2][...]  просмотреть содержимое регистров
+
+#== Выделение ==
+v + hjkl                  выделение текста
+SHIFT + v                 выделить строку
+CTR + v                   выделение прямоугольника
+p                         вставить
+y                         копировать
+d                         удалить
+gu                        к нижнему регистру
+gU                        к верхнему регистру
+
+#== Отступы ==
+[#]>                      сдвинуть выделенное вправо
+[#]<                      сдвинуть выделенное влево
+[#]>>                     сдвинуть строку вправо
+[#]<<                     сдвинуть строку влево
+set tabstop=#             для табуляции используется # пробелов
+set shiftwidth=#          в командах отступа используется # пробелов
+set [no]expandtab         заменять ли табуляцию на соответствующее
+                            число пробелов
+
+#== Поиск и замена в файле ==
+/Выражение               поиск выражения в файле
+\cВыражение              поиск без учета регистра
+n                        следующее совпадение
+N                        предыдущее совпадение
+:%s/foo/bar/gi           замена строк, см http://eax.me/regular-expr/
+
+#== Поиск по всему проекту ==
+:vimgrep /EXPR/ **/*.c   поиск по регулярному выражению
+:copen                   показать все найденные места
+:close                   скрыть все найденные места
+:cn                      переход к следующему результату
+:cp                      переход к предыдущему результату
+
+#== Нумерация строк ==
+:set number              включить нумерацию строк
+:set nonumber            отключить нумерацию строк
+
+#== Работа с вкладками (a.k.a табами) ==
+:tabnew [fname]          создать таб
+:tabs                    вывести список табов
+:tabn                    следующий таб
+:tabp                    предыдущий таб
+<n>gt                    перейти на таб #n
+gt                       следующий таб
+gT                       предыдущий таб
+:tabm +1                 переместить таб вперед на одну позицию
+:tabm -1                 переместить таб назад на одну позицию
+:tabm 2                  переместить таб на заданную позицию
+                           (нумерация начинается с нуля)
+
+#== Работа с окнами ==
+:split                   горизонтальное разбиение
+:vsplit                  вертикальное разбиение
+Ctr+W, затем
+  с                      закрыть окно
+  +-                     изменение высоты текущего окна
+  <>                     изменение ширины текущего окна
+  =                      установить равный размер окон
+  hjkl или стрелочки     перемещение между окнами
+
+#== Проверка орфографии ==
+    mkdir -p ~/.vim/spell
+    cd ~/.vim/spell
+    wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.sug
+    wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.spl
+    wget http://ftp.vim.org/vim/runtime/spell/en.ascii.sug
+    wget http://ftp.vim.org/vim/runtime/spell/en.ascii.spl
+
+:set spell spelllang=ru,en       включить проверку орфографии
+:set nospell                     выключить проверку орфографии
+]s                               следующее слово с ошибкой
+[s                               предыдущее слово с ошибкой
+z=                               замена слова на альтернативу из списка
+zg                               good word
+zw                               wrong word
+zG                               ignore word
+
+#== Работа с кодировкой ==
+e ++enc=<имя кодировки>         Редактирование файла в ??? кодировке
+w ++enc=<имя кодировки>         Сохранить файл в новой кодировке
+set fileencodings=utf-8,koi8-r  Список автоматически определяемых
+                                  кодировок в порядке убывания
+                                  приоритета
+
+#== Другое ==
+:set [no]wildmenu          При авто-дополнении в командной строке над
+                             ней выводятся возможные варианты
+:set list                  Отображать табуляцию и переводы строк
+q:                         История команд
+.                          Повторение последней команды
+#=======================================================
+
+a - insert после курсора
+I - insert в начало текущей строки
+o - создает строку ниже и insert
+O - создает строку выше и insert
+
+gg - перейти в начало файла
+1G - в начало
+42G - на 42 строку
+G - перейти на последний абзац
+
+0 - первый символ предложения
+$ - последний символ предложения
+
+w - перейти в начало следующего слова
+W -
+b - перейти в начало предыдущего слова
+B -
+e - перейти в конец текущего слова
+E - перейти в конец текущего слова (пробел)
+( - перейти к началу текущего предложения
+) - перейти к началу следующего предложения
+{ - перейти к началу текущего абзаца
+} - перейти к началу следующего абзаца
+\[\[ - перейти к началу текущего раздела
+\]\] - перейти к началу следующего раздела
+
+### Поиск:
+/шаблонEnter - поиск вперед
+?шаблонEnter - поиск назад
+
+### Замена текста:
+cw - до конца слова
+c2b - на 2 слова назад
+c$ - в конец строки
+c0 - в начало строки
+
+### Строки:
+cc - полная замена строки
+C - замена от текущего положения до конца строки
+J - объединить текущую строку и следующую
+ (. - можно повторить)
+
+### Символы:
+r - замена символа и переход в командный режим
+R - замена символов от курсора вперед
+~ - смена регистра
+x - удалить символ под курсором
+X - удалить символ перед курсором
+50i*ESC - вставка 50 \*
+25A\*=ESC - вставка 50 \*=
+
+### Замена текста:
+s - замена символа
+4s - замена 4 символов
+S - замена всей строки
+|| замена на && - курсор на первый символ -> 2r&
+
+### Удаление текста:
+dw - удалить слово и пробел с курсора и до конца слова
+dd - удалить строку целиком
+D - удалить строку от курсора до конца строки
+de - удаляет только слово с курсора и до конца слова
+d$ - удаляет от курсора до конца строки
+d0 - удаляет от курсора до начала строки
+xp - поменять местами буквы
+
+### Команды:
+u - отмена последней операции
+ctrl+R - отмена отмены
+U - восстановить строку к первоначальному виду
+p - вставить после курсора
+P - вставить до курсора
+y - копировать (yw, y$, y0)
+yy - копировать строку целиком (4yy - 4 строки)
+. - повтор
+
+### Прокрутка экрана:
+^F - вперед
+^B - назад
+^D - вперед на половину
+^U - назад на половину
+^E - вперед на строку
+^Y - назад на строку
+
+### Положение экрана:
+z Enter и z+Enter - прокрутить чтобы текущая строка оказалась в верхней части экрана
+z. - прокрутить чтобы текущая строка оказалась в центре экрана
+z- - прокрутить чтобы текущая строка оказалась в нижней части экрана
+
+^L - перерисовка экрана
+H - первый символ начала верхней строки экрана
+M - первый символ начала средней строки экрана
+L - первый символ начала нижней строки экрана
+nH -
+nL -
+
+
+f - поиск символа
+r - замена символа под курсором
+R - замена до нажатия ESC
+/ - поиск слова вниз документа от текущего положения курсора
+? - поиск слова вверх документа от текущего положения курсора
+n - следующий в поиске
+control + g - имя файла и в какой строке курсор
+shift + g - перейти в конец файла
+11 + shift + G - вернет к строке когда нажали control + g
+
+m x - закладка на строку с именем x
+x - вернуться на строку с закладкой х
+
+v - режим выделения + стрелки
+V - выделение всей строки
+d - удалить выделение
+dw - удалить слово
+d$ - удалить до конца строки
+D - удалить текст от курсора до конца строки
+x - вырезать в буфер
+yy - копировать в буфер ?
+p - вставить из буфера справа от курсора
+P - вставить из буфера слева от курсора
+dw - удалить слово
+dd - удалить строку
+cc - удалить и начать редактирование
+u - отменить действие (назад)
+U - отменить во всей строке
+2dd - удалить 2 строки
+
+cw - заменить слово
+Cw - заменить текст до конца строки
+
+q1 - запись макроса (закончить запись = q)
+@1 - выполнить макрос 1
+```
+