Базовые операции в Vim, или Vim как обычный текстовый редактор

Если вы в первый раз столкнулись с консольным Vim, данный урок поможет использовать его как простой текстовый редактор, познакомившись для этого с необходимым минимумом команд.

Вы узнаете как:

  1. открывать файл в Vim, набирать текст, сохранять изменения и выходить из редактора,
  2. перемещаться по содержимому, выполнять поиск,
  3. отменять изменения,
  4. удалять, копировать и вставлять текст.

Дав команду vim в командной оболочке, вы увидите следующее (в зависимости от версии и установленного языка):

При этом открывается безымянный буфер, содержимое которого вы сможете потом сохранить в файл. Вводная информация на экране исчезнет, как только вы начнете работать.

Первое, что нужно запомнить: Vim – это редактор с несколькими различными режимами работы. Режим, в котором вы оказываетесь сразу после запуска Vim, называется командным, и в нем нельзя просто так вводить текст, как это делается в обычном текстовом редакторе. Также этот режим называют нормальным, подчеркивая тем самым, что истинный пользователь Vim (мы не будем пытаться являться таковым в этом уроке) должен находиться в нем большую часть времени.

Чтобы все-таки начать ввод текста, следует нажать i на клавиатуре (обратите внимание, для срабатывания команд должна быть включена английская раскладка, если до этого не были выполнены соответствующие настройки Vim).

После этого вы окажитесь в режиме обычного редактирования текста, а конкретнее – в режиме вставки (insert), о чем редактор вам сообщит в строке состояния.

В месте ввода мигает курсор. Вводить можно в том числе русские символы.

Завершив набор текста, нажмите Esc. Произойдет возврат в командный режим. Для большей уверенности можно нажать Esc два раза. После второго издается звук.

Сохранение файла и выход из Vim

Чтобы сохранить данные в файл, надо сначала переключиться в режим командной строки. Не путайте его с командным режимом (нормальным режимом)! Режим командной строки похож на работу в командной оболочке и унаследован Vim’ом от редактора ex.

Чтобы перейти в режим командной строки, надо в нормальном режиме дать команду :, то есть набрать двоеточие. Вы его сразу увидите в начале строки состояния. Далее для сохранения следует ввести букву w.

Вспомним, что мы запускали Vim без создания файла. Поэтому теперь после w через пробел надо указать имя файла (в случае необходимости – с адресом). Например, команда может выглядеть так: :w per001.py.

В режиме командной строки для выполнения команд надо нажимать Enter (в нормальном режиме во многих случаях в этом нет необходимости). В данном случае файл будет создан и записан.

Выход из Vim происходит по команде :q. Выход без сохранения изменений – :q!. После этого вы возвращаетесь туда, откуда запускали Vim (в соответствующий сеанс командной оболочки).

Чаще возникает необходимость в открытии, просмотре содержимого или правке существующего файла, или вы хотите сразу дать имя новому файлу. В этом случае в командной оболочке (например, Bash) дается команда вида vim адрес/имя_файла или просто vim имя_файла, если файл содержится в текущем каталоге.

При сохранении изменений в отредактированном файле в командной строке Vim дается просто команда :w. Если вы хотите сразу сохранить и выйти, то команда может выглядеть как :wq или :ZZ. (зажать Shift, потом два раза нажать z).

В случае необходимости сохранить изменения, оставив исходный файл без изменений (вариант "Сохранить как…"), в командной строке Vim дается команда :w новое_имя_файла.

Перемещение по файлу

В Vim для перемещения курсора по содержимому файла не обязательно, даже не нужно, переключаться в режим вставки (когда нажимается i). Следует оставаться в нормальном режиме.

Если вы владеете слепым методом печати на клавиатуре, то пальцы правой руки находятся на клавишах j, k, l и точке с запятой/двоеточии. Нажимая j, то есть наиболее удобным указательным пальцем, вы будете перемещать курсор вниз строка за строкой. Нажимая k, вверх. Клавиша l перемещает курсор вправо. Для перемещения влево необходимо сместить указательный палец на h и нажимать эту клавишу.

При выработке навыка перемещение с помощью h, j, k, l удобнее, но если вы планируете использовать Vim только в редких случаях, то перемещаться можно также с помощью стрелок клавиатуры.

В Vim часто используют числовые коэффициенты. Так, если в нормальном (командном) режиме набрать число 10 на клавиатуре, а затем нажать j, то курсор сместится сразу на 10 строчек вниз. При наборе числа вы будете видеть его в строке состояния редактора.

Может быть удобнее перемещаться к строке с определенным номером. Подобное выполняется с помощью ввода числа (номера строки, к которой вы хотите перейти), после чего нажимается прописная G (Shift+g). Просто G без числа переместит курсор в конец файла.

На предыдущем скрине, если после ввода числа 5 вместо команды j дать команду G, то курсор окажется в строке def func():, потому что она пятая по счету от начала файла.

В длинных текстовых файлах определить на глаз номер той или иной строки сложно. Чтобы в Vim включить нумерацию строк, следует в командной строке выполнить команду :set nu.

Отключение нумерации – :set nonu.

Часто требуется найти в файле место, в котором содержится определенное слово или фраза. Чтобы начать поиск, надо в командном режиме ввести слэш (косую черту). Вы перейдете в разновидность режима командной строки – режим поиска. После слэша пишется искомая фраза. Уже в процессе ввода Vim подсветит первое совпадение при поиске вниз от текущей позиции курсора.

После нажатия Enter вы сможете выполнять другие команды. Например, отредактировать текст или удалить строку с ним. При этом Vim будет помнить исходную фразу. Чтобы продолжить ее поиск (фраза может встречаться в файле несколько раз), надо в нормальном режиме нажимать n.

После нажатия n редактор Vim нашел в файле второе совпадение

Итак, когда вы перешли то место файла, которое хотите отредактировать, можете нажать i и приступить к делу так, как это делается в обычных редакторах: удалять символы с помощью Delete и Backspace, перемещаться стрелками на клавиатуре, писать текст, не задумываясь сколько символов вам надо добавить или заменить, формировать новые строки нажатием Enter.

Отмена изменений

В случае необходимости отмены изменений (откат назад) следует вернуться в нормальный режим (нажать Esc) и воспользоваться клавишей u столько раз, сколько потребуется. При этом также можно использовать числовые коэффициенты. Так ввод числа 3 с последующим нажатием u отменит три последних действия.

Если надо отменить все изменения в текущей строке, дается команда U (Shift+u).

Команда :e! в командной строке Vim отменяет все изменения в файле. Если вы открыли файл и не сохраняли (:w) его в процессе редактирования, то его содержимое будет приведено к состоянию на момент открытия. Иначе, откат будет до момента сохранения. Другими словами, :e! - возврат к последней сохраненной версии файла.

Повтор изменений (откат вперед) – Ctrl+r.

Отметим, что при работе с Vim следует обращать внимание на регистр символов. Обычно принято при указании комбинаций клавиш пользоваться верхним регистром для букв. Так например горячие клавиши копирования записывают как Ctrl+C или Ctrl-C. При этом имеется в виду, что вы будете нажимать клавишу c без шифта. Поскольку в Vim строчные и прописные буквы обозначают разные команды, чтобы не вносить путаницу в комбинациях клавиш, будем указывать их в малом регистре.

Удаление, копирование и вставка

В Vim в нормальном (командном) режиме для удаления одного символа используется клавиша x. При этом удаляется символ, на котором стоит курсор.

Если нужно удалить несколько символов, то перед тем как нажимается x вводится числовой коэффициент.

Для удаления одной строки используется комбинация dd (два раза подряд нажимается буква d). Чтобы удалить несколько строк, также используются числа.

Удаленный текст помещается в буфер обмена Vim и может быть потом вставлен в другое место файла. По-сути, удаление здесь – это вырезание.

Рассмотрим пример. Имеется файл с кодом:

print("hello")
a = 10
print(a)
    
def func():
    print('f')
    
func()

И мы хотим определение функции переместить в начало. Алгоритм действий может быть таким:

  1. С помощью j (или k) помещаем курсор в строку def func():.
  2. Выполняем команду 3dd. Удалятся три строки: сама функция и пустая строка после нее.
  3. Переходим в первую строку файла: 1G.
  4. Нажимаем P, чтобы вставить функцию выше текущей строки (p вставляет под строкой с курсором).

Несмотря на то, что список действий может показаться большим по сравнению с интуитивным переносом текста в обычных средах разработки, зачастую при выработке навыка он выполняется быстрее. Однако от пользователя требуется больше осознанности и детализации понимания того, что он собирается делать.

Копирование одной строки выполняется командой yy. Если надо скопировать несколько строк, сначала указывается число. Например, 5yy скопирует пять строк. Ту, в которой находится курсор, и четыре строки ниже.

Если нужно скопировать определенное количество слов, то

  1. курсор устанавливается на первый символ первого копируемого слова,
  2. вводится y,
  3. указывается количество копируемых слов,
  4. нажимается w (word – слово).

Комбинация yw копирует одно слово.

Скопировать один символ можно комбинацией yl, пять символов – y5l. Клавиша l здесь соответствует направлению движения. Вспомним, что сама по себе она перемещает курсор вправо.

Вышесказанное работает и для удаления нескольких слов или символов. В этом случае вместо y используется d.

Если вы попытаетесь скопированный таким образом в Vim текст вставить в другую программу, ничего не выйдет. В Vim работает свой буфер обмена, отдельный от системного.

Самым простым способом "обмена данными" будет выделение мышью блока текста, с последующим выбором через контекстное меню терминала пункта "Копировать". Аналогичным образом текст из внешнего источника можно вставить в Vim. Также в терминале Ubuntu работают горячие клавиши Ctrl+Shift+c, Ctrl+Shift+v.

Введение в Linux и Bash. Курс




Все разделы сайта