### Перемещение по экрану ### `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 ://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                         вставить из буфера обмена d                      удалить n+1 строку y                      скопировать n+1 строку ESC                       перейти в режим просмотра DEL                       удалить следующий символ :                      перейти на строку #n %                         перейти к парной скобке :e **/filename.c          редактировать файл (с поиском по имени) :w [fname]                записать изменения :wa                       сохранить изменения во всех файлах :q                        выйти из редактора :q!                       выйти из редактора, не сохраняя изменения :color             выбор цветовой схемы. цветвые схемы:                             /usr/local/share/vim/vim72/colors/*.vim :pwd                      текущий каталог :cd [path]                перейти в другой каталог :!команда                 выполнить команду - man, git, и так далее                             стрелочками веерх и вниз можно автодополнять                             команды и искать по истории CTR+p или CTR+n           автоматическое дополнение текста                             (в режиме редактирования) CTR+r,=,            вставить выражение, например 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                    предыдущий таб 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 ```