Я использую Vim с тех пор, как начал использовать Linux, много лет назад, но совсем недавно я решил использовать его в качестве основного текстового редактора. Для этого есть много причин, от быстрой до очень производительной, до гибкой настройки, доступной практически в любой установке Linux или Mac. Но есть (небольшая) кривая обучения для всех, кто хочет начать использовать Vim, и я не говорю о нажатии :q
для выхода из редактора.
Для случайного пользователя достаточно знать, что вы нажали a
, i
или Insert
, чтобы начать запись, Esc
, когда закончите, и :wq
, чтобы написать и выйти. Но когда вам нужно открыть несколько файлов, необходимо знать хотя бы минимум о буферах, окнах и вкладках, и я намерен дать краткое объяснение по этому поводу.
Прежде чем мы начнем, давайте поговорим о режимах vim…
В Vim есть несколько режимов, которые действуют совершенно по-разному и, следовательно, имеют разные сопоставления клавиш. Это Обычный, Визуальный, Вставить, Заменить и Командный.
- Обычный (
Esc
) — это режим по умолчанию, который запускается при открытии Vim в терминале (или Gvim, если вы используете версию с графическим интерфейсом). В этом режиме каждая клавиша может иметь различное сопоставление, включая буквенные клавиши, вы не можете писать, но можете вырезать и вставлять. Вы всегда можете вернуться в обычный режим, нажавEsc
из любого другого режима Vim. - Визуальный (
v
) очень похож на Обычный режим, но он предназначен главным образом для выбора блоков или строк текста для копирования или других действий. Доступ к визуальному режиму осуществляется с помощьюv
из нормального режима,Shift+v
выбора строк иCtrl+v
выбора текстовых блоков. - Вставить (
a
,i
) и Заменить (R
) и оба режима редактирования текста, с той лишь разницей, что последний заменяет текст под курсором. Большинство сопоставлений клавиш, которые работают в обычном и визуальном режимах, не будут работать в режимах «Вставить» или «Заменить». Доступ к режиму вставки осуществляется с помощьюa
,i
, к режиму замены осуществляется с помощьюR
. - Команда (
:
) — это режим, используемый для записи и выполнения команд, и вы уже знаете его. Доступ к командному режиму осуществляется клавишей:
из нормального режима.
Большинство показанных ниже сопоставлений клавиш для переключения между буферами, окнами и вкладками следует использовать в обычном режиме.
Где файлы, которые я открыл?
Vim может открывать и редактировать несколько файлов одновременно. Поэтому, если вы напишете в терминале vim file1.txt file2.txt file3.txt
, все они будут открыты, но вы увидите только первый. Это потому, что vim открывает файлы в буферах.
Справка из vim :h buffers
Буфер — это текст файла в памяти.
Окно — это область просмотра в буфере.
Вкладка представляет собой набор окон.
Буферы
Таким образом, каждый открываемый вами файл будет помещен в буфер, который может отображаться или нет. Вы можете переключаться между буферами с помощью команд :bnext
и :bprev
и перечислять их все с помощью команды :buffers
.
:buffers
,:ls
список всех буферов:buffer [N]
показать буфер с указанным номером:bnext
/:bprev
показать следующий/предыдущий буфер:edit [filename]
поместить новый файл в буфер:bdelete [N]
удалить текущий буфер или буфер [N][N] Ctrl-^
перейти к буферу [N] или ранее показанному буферу
Обратите внимание, что :q
не удаляет буфер, оставляя его в памяти, таким образом, не удаляя его из списка буферов.
Окна
Окно Vim — это то, что вы видите и с чем взаимодействуете. Окно всегда показывает буфер, будь то из файла или просто пустой. Много окон можно открыть одновременно, разделив редактор.
Ctrl-w s
,:split [filename]
разделить окно, опционально открывая новый файлCtrl-w v
,:vsplit [filename]
разделить окно по вертикали, опционально открывая новый файл:sbuffer [N]
разделить окно и открыть буфер [N]:sball
открыть все буфера в окнахCtrl-w w
/Ctrl-w W
перейти к следующему/предыдущему окнуCtrl-w [direction]
подойдите к окну в [направление]:q
закрыть окно (если это последнее окно, оно также выходит из редактора):qa
закрыть все окна и выйти из редактора
Многие известные плагины Vim, такие как NERDTree, используют Windows для отображения списков или файловой системы.
Вкладки
Вкладка может отображать одно или несколько окон, и если существует более одной вкладки, список вкладок отображается в верхней части редактора, как вкладки в браузере.
:tabnew [filename]
создать новую вкладку, при желании открыв файлgt
/gT
,:tabnext
/:tabprev
показать следующую/предыдущую вкладку:tab sball
открыть все буфера во вкладках
Собираем все вместе
Подводя итог, можно сказать, что окно может отображать содержимое буфера, а вкладка может содержать одно или несколько окон.
Используя множество вкладок vim, можно почти воспроизвести внешний вид графического текстового редактора (вспомните Atom или VS Code), с несколькими вкладками, каждая из которых отображает файл. На них легко смотреть или перемещаться с помощью gt/gT, а также их можно перемещать. Но через некоторое время этот выбор становится немного ограниченным, потому что гораздо быстрее циклически перемещаться по буферам, когда вы к ним привыкли.
Хорошая рекомендация — привыкнуть к буферизации команд, таких как :ls
, :bnext
и :bprev
, с самого начала и просто использовать больше (разделенных) окон или вкладок по мере необходимости.