Основные режимы работы.
«Обычный режим» — перемещение по файлу, стирание текста и другие редактирующие функции. Это — основной режим, только из него можно сразу перейти в другие режимы. Для возврата в основной режим из любого другого режима:
<ESC>, иногда 2 раза;
<Ctrl-[>
«Режим ввода» — ввод текста. Как только завершается ввод текста, принято сразу возвращаться в обычный режим. Заметьте, что стирание и ввод текста происходит в двух разных режимах. Переход в него из обычного режима:
i
<Insert>
«Командный режим» -Команды (операции с файлом, поиск и замена, настройка редактора…). Переход в него из обычного режима:
:
«Режим поиска» — ввод поискового запроса. Переход в него из обычного режима
/ , поиск от курсора до конца документа
? , поиск от курсора до начала документа
«Визуальный режим» — режим выделения текста:
«v» и влево или вправо стрелками; Shift+v вся строка целиком; Ctrl+v прямоугольник, часть текста.
| h | Влево |
|---|---|
| j | Вниз |
| k | Вверх |
| l | Вправо |
| «стрелки» | Перемещение по тексту (в больших файлах работает медленно, в некоторых конфигурациях может работать некорректно). |
| w | К следующему слову |
| W | К следующему слову (по пробелам) |
| b | К началу слова |
| B | К началу слова (по пробелам) |
| ^ | К первому непробельному символу строки |
| + или <cr /> | К первому символу следующей строки |
| — | К первому непробельному символу предыдущей строки |
| e | К концу слова |
| E | К концу слова (по пробелам) |
| ( | К началу предложения |
| ) | К концу предложения |
| { | К началу абзаца |
| } | К концу абзаца |
| Примечание: абзацы разделяются пустой строкой. | |
| 0 или | | К началу строки |
| n| | К позиции n текущей строки |
| $ | В конец строки |
| 1G | К первой строке файла |
| G | К последней строке файла |
| nG или :n | К n-ой строке файла |
| fc | Вперед к символу c |
| Fc | Назад к символу c |
| H | К верхней строке экрана |
| nH | К n-ой строке от начала экрана |
| M | К средней строке экрана |
| L | К нижней строке экрана |
| nL | К n-ой строке от конца экрана |
| CTRL-d | Прокрутка вниз на пол-экрана |
| CTRL-f | Прокрутка вниз на экран |
| CTRL-u | Прокрутка вверх на пол-экрана |
| CTRL-b | Прокрутка вверх на экран |
| CTRL-e | Прокрутка на строку вниз |
| CTRL-y | Прокрутка на строку вверх |
| CTRL-l | Обновить экран |
| z <cr /> | Сделать текущую строку верхней строкой экрана |
| nz | Сделать строку n верхней строкой экрана |
| z. | Сделать текущую строку средней строкой экрана |
| nz. | Сделать строку n средней строкой экрана |
| z- | Сделать текущую строку нижней строкой экрана |
| nz- | Сделать строку n нижней строкой экрана |
| % | К парной скобке: ( ), { }, [ ] |
Удаление текста
Большинство команд удаления образуются из символа d и команды перемещения. Например, dw удаляет слово. Другие команды удаления:| x | Удалить текущий символ |
| nx | Удалить n символов вправо, начиная с текущего |
| X | Удалить символ слева от курсора |
| nX | Удалить n символов влево от курсора |
| D | Удалить до конца строки |
| d$ | Удалить от курсора до конца строки |
| dd или :d | Удалить текущую строку |
| ndw | Удалить следующие n слов, начиная с текущего |
| ndb | Удалить предыдущие n слов, начиная с текущего |
| ndd | Удалить следующие n строк, начиная с текущей |
| :n,md | Удалить строки с n до m |
| dMotion_cmd | Удалить все, что захватывает команда перемещения (например, dG удаляет текст от текущей позиции до конца файла, а d4 — до конца 4-го предложения). |
| «(a-z)ndd | Вырезать n строк в именованный буфер (от a до z) |
| «(a-z)dd | Вырезать текущую строку в именованный буфер (от a до z) |
| «np | Отменить n-е из последних удалений (последние 9 удалений хранятся в буфере) |
| «1pu.u. | Просмотр буфера удалений, пока не будет возвращено нужное (повторить — u.) |
Копирование в буфер
Подобно командам удаления, большинство команд копирования в буфер состоят из символа y и команды перемещения. Например, y$ помещает в буфер конец строки.| yy или :y | Копировать текущую строку |
| nyy или nY | Копировать n строк |
| yMotion_cmd | Копировать текст, захватываемый командой перемещения (например, yG копирует все от текущей позиции курсора до конца файла, а y4 — до конца текущего предложения) |
| «(a-z)nyy | Копировать n строк в именованный буфер (от a до z) |
| «(a-z)yy | Копировать текущую строку в именованный буфер (от a до z) |
Изменение текста
Команды изменения действуют как команды удаления с последующим переводом в режим ввода. Большинство из них состоит из символа c и команды перемещения. Например cw заменяет слово.| C | Заменить от курсора до конца строки |
| cc или S | Заменить всю текущую строку |
| xp | Обменять символ над курсором и следующий |
| s | Заменить текущий символ |
| cw | заменить текущее слово |
| cMotion_cmd | Заменить текст, захватываемый командой перемещения |
| Сдвинуть строку влево/вправо на shift width (по умолчанию — 8 позиций) | |
| n | Сдвинуть n строк влево/вправо на shift width (по умолчанию — 8 позиций) |
| Motion_cmd | Сдвинуть строки, захватываемые командой перемещения, влево/вправо |
Вставка из буфера
| p | Поместить текст из буфера после курсора |
| P | Поместить текст из буфера перед курсором |
| «(a-z)p или «(a-z)P | Поместить текст из буфера (от a до z) после/перед текущей строкой |
Поиск/замена подстрок
| /str | Поиск str вперед от курсора |
| ?str | Поиск str назад от курсора |
| n | Повторить поиск в том же направлении |
| N | Повторить поиск в обратном направлении |
| % | Поиск парной скобки: ( ) [ ] или { } |
| fc | Поиск символа c по текущей строке вперед |
| Fc | Поиск символа c по текущей строке назад |
| tc | Поиск символа c по строке вперед, курсор устанавливается на предыдущий символ |
| Tc | Поиск символа c по строке назад, курсор устанавливается на предыдущий символ |
| :set ic | Игнорировать регистр при поиске |
| :set noic | Учиитывать регистр при поиске |
| :n,ms/str1/str2/opt | Искать строку str1 со строки n до m (n и m могут быть опущены); заменить str1 на str2; с опциями opt. Возможные опции: g — глобальный, c — подтверждать замены (y — заменить, <cr /> — не заменять), p — печатать измененные строки |
| & | Повторить последнюю команду :s |
| :g/str/cmd | Выполнить команду cmd для каждой строки, содержащей str |
| :g/str1/s/str2/str3/ | Найти строку, содержащую str1, заменить str2 на str3 |
| :v/str/cmd | Выполнить команду cmd для каждой строки, не содержащей str |
| ; | Повторить поиск |
| , | Повторить поиск в обратном направлении |
Шпаргалка по Vim
Общее
- :help keyword — открыть помощь по ключевому слову
- 😮 file — открыть file
- :sav file — сохранить весь текщий буфер как file
- :close — закрыть текущую панель
- K — открыть справочное руководство для слова под курсором
Перемещение курсора
- h — передвинуть курсор влево
- j — передвинуть курсор на одну фактическую строку вниз
- k — передвинуть курсор на одну фактическую строку вверх
- l — передвинуть курсор вправо
- gj — передвинуть курсор на одну видимую строку вниз
- gk — передвинуть курсор на одну видимую строку вверх
- H — переместиться к началу экрана
- M — переместиться к середине экрана
- L — переместиться к концу экрана
- w — переместиться вперед на начало слова
- W — переместиться вперед на начало слова (слово может содержать пунктуацию)
- e — переместиться вперед на конец слова
- E — переместиться вперед на конец слова (слово может содержать пунктуацию)
- b — переместиться назад на начало слова
- B — переместиться назад на начало слова (слово может содержать пунктуацию)
- % — переместиться к парному символу (по умолчанию поддерживаются: ‘()’, ‘{}’, ‘[]’ — подробнее по команде
:h matchpairsв vim) - 0 — переместиться на начало строки
- ^ — переместиться на первый непробельный символ строки
- $ — переместиться на конец строки
- g_ — переместиться к последнему непустому символу в строке
- gg — переместиться на первую строку документа
- G — переместиться на последнюю строку документа
- 5G — переместить на пятую строку
- fx — переместиться к следующему вхождению символа x в текущей строке
- tx — установить курсор за следующим вхождением символа x в строке
- Fx — переместиться на предыдущее вхождение символа x в текущей строке
- Tx — установить курсор за предыдущим вхождением символа x в строке
- ; — повторить предыдущее f, t, F или T перемещение
- , — повторить предыдущее f, t, F или T перемещение, в обратном направлении
- } — переместиться к следующему параграфу (или функции/блоку при редактировании кода)
- { — переместиться к предыдущему параграфу (или функции/блоку при редактировании кода)
- zz — сдвинуть весь буфер по вертикали вместе с курсором, так чтобы курсор оказался в центре
- Ctrl + b — переместиться назад на целый экран
- Ctrl + f — переместиться вперед на целый экран
- Ctrl + d — переместиться вперед на половину экрана
- Ctrl + u — переместиться назад на половину экрана
Режим вставки — вставка/добавление текста
- i — вставка перед курсором
- I — вставка в начало строки
- a — вставка (добавление) после курсора
- A — вставка (добавление) в конец строки
- o — добавление новой строки под текущей
- O — добавление новой строки над текущей
- ea — вставка (добавление) после конца слова
- Esc — выход из режима вставки
Редактирование
- r — заменить один символ
- J — присоединить нижнюю строку к текущей
- cc — заменить всю строку
- cw — заменить всё текущее слово
- c$ — заменить до конца строки
- s — удалить символ и заменить текст
- S — удалить строку и заменить текст (то же что cc)
- xp — переставить две буквы (удалить и вставить)
- u — отменить
- Ctrl + r — применить последнее отменённое изменение
- . — повторить последнюю команду
Выделение текста (визуальный режим)
- v — включить режим выделения текста, выделить строки, затем выполнить команду (например, y-копирование)
- V — включить построчный режим выделения
- o — переместиться на другой конец выделенной области
- Ctrl + v — включить режим выделения блоков
- O — переместить на другой угол блока
- aw — выделить слово
- ab — блок в ()
- aB — блок в {}
- ib — внутренний блок в ()
- iB — внутренний блок в {}
- Esc — выйти из режима выделения текста
Визуальные команды
- > — сместить текст вправо
- < — сместить текст влево
- y — скопировать выделенный текст
- d — удалить выделенный текст
- ~ — переключить регистр
Регистры
- :reg — показать содержимое регистров
- "xy — поместить содержимое в регистр x
- "xp — вставить содержимое регистра x
Метки
- :marks — список меток
- ma — установить метку A на текущей позиции
- `a — переместиться к метке A
- y`a — скопировать до метки A
Макросы
- qa — записать макрос A
- q — остановить запись макроса
- @a — run macro a
- @@ — выполнить последний макрос
Вырезать и вставить
- yy — скопировать строку
- 2yy — скопировать 2 строки
- yw — скопировать слово
- y$ — скопировать до конца строки
- p — вставить буфер обмена после курсора
- P — вставить буфер обмена перед курсором
- dd — удалить (вырезать) строку
- 2dd — удалить (вырезать) 2 строки
- dw — удалить (вырезать) слово
- D — удалить (вырезать) до конца строки
- d$ — удалить (вырезать) до конца строки
- x — удалить (вырезать) символ
Выход и сохранение
- :w — сохранить файл, но не выходить
- :w !sudo tee % — сохранить файл с sudo
- :wq либо 😡 либо ZZ — сохранить файл и выйти
- :q — выйти (терпит неудачу в случае несохраненных изменений)
- :q! либо ZQ — выйти и потерять несохраненные изменения
Поиск и замена
- /pattern — поиск шаблона
- ?pattern — обратный поиск шаблона
- \vpattern — ‘very magic’ режим: все не алфавитно-цифровые символы интерпретируются как специальные (экранирование не требуется)
- n — повторить поиск в том же направлении
- N — повторить поиск в обратном направлении
- :%s/old/new/g — заменить все вхождения шаблона в файл на указанное значение
- :%s/old/new/gc — заменить все вхождения шаблона в файл на указанное значение с подтверждением
- :noh — отключить подсвечивание результатов поиска
Поиск в нескольких файлах
- :vimgrep /pattern/ {file} — поиск по шаблону в нескольких файлах
- :cn — переместиться к следующему совпадению
- :cp — переместиться к предыдущему совпадению
- :copen — открыть окно со списком результатов
Сворачивание
- zf#j — создает свертку от текущей позиции до # строк вниз
- zf/подстрока — создает свертку от текущей позиции и до первой найденной подстроки
- v/V и zf — выделение блока и создание свертки
Команды для управления:
- zc — свернуть блок
- zo — развернуть блок
- zM — закрыть все блоки
- zR — открыть все блоки
- za — инвертирование (если открыто – закрыть, если закрыто – открыть)
- zj — переход к следующей свертке
- zk — переход к предыдущей свертке
- zd — удалить свертку под курсором
- zD — удалить все свертки
- [z — перейти к началу текущей свертки
- ]z — перейти к концу текущей свертки
После закрытия Vim все свертки забываются, для сохранения сверток в открытом файле используется команда :mkview, для загрузки — :loadview (подробнее).
Работа с несколькими файлами
- :e file — редактировать файл в новом буфере
- :bnext либо :bn — перейти к следующему буферу
- :bprev либо :bp — перейти к предыдущему буферу
- :bd — удалить буфер (закрыть файл)
- :ls — список всех открытых буферов
- :sp file — открыть файл в новом буфере и разделить окно
- :vsp file — открыть файл в новом буфере и вертикально разделить окно
- Ctrl + ws — разделить окно
- Ctrl + ww — переключение окон
- Ctrl + wq — закрыть окно
- Ctrl + wv — разделить окно вертикально
- Ctrl + wh — переместить курсор в левое окно (вертикально разделение)
- Ctrl + wl — переместить курсор в правое окно (вертикальное разделение)
- Ctrl + wj — переместить курсор в окно ниже (горизонтальное разделение)
- Ctrl + wk — переместить курсор в окно выше (горизонтальное разделение)
Вкладки
- :tabnew либо :tabnew file — открыть файл в новой вкладке
- Ctrl + wT — переместить текущее окно в собственную вкладку
- gt либо :tabnext либо :tabn — переключиться на следующую вкладку
- gT либо :tabprev либо :tabp — переключиться на предыдущую вкладку
- #gt — переключить на вкладку номер #
- :tabmove # — переместить текущую вкладку на # позицию (нумерация с 0)
- :tabclose либо :tabc — закрыть текущую вкладку и все её окна
- :tabonly либо :tabo — закрыть все вкладки кроме текущей
- :tabdo command — выполнить
commandна всех вкладках (к примеру:tabdo q— закрывает все открытые вкладки)