Я использую 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, с самого начала и просто использовать больше (разделенных) окон или вкладок по мере необходимости.