Базовые операции в Vim, или Vim как обычный текстовый редактор
Если вы в первый раз столкнулись с консольным Vim, данный урок поможет использовать его как простой текстовый редактор, познакомившись для этого с необходимым минимумом команд.
Вы узнаете как:
- открывать файл в Vim, набирать текст, сохранять изменения и выходить из редактора,
- перемещаться по содержимому, выполнять поиск,
- отменять изменения,
- удалять, копировать и вставлять текст.
Дав команду 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.
Итак, когда вы перешли то место файла, которое хотите отредактировать, можете нажать 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()
И мы хотим определение функции переместить в начало. Алгоритм действий может быть таким:
- С помощью j (или k) помещаем курсор в строку
def func():
. - Выполняем команду 3dd. Удалятся три строки: сама функция и пустая строка после нее.
- Переходим в первую строку файла: 1G.
- Нажимаем P, чтобы вставить функцию выше текущей строки (p вставляет под строкой с курсором).
Несмотря на то, что список действий может показаться большим по сравнению с интуитивным переносом текста в обычных средах разработки, зачастую при выработке навыка он выполняется быстрее. Однако от пользователя требуется больше осознанности и детализации понимания того, что он собирается делать.
Копирование одной строки выполняется командой yy. Если надо скопировать несколько строк, сначала указывается число. Например, 5yy скопирует пять строк. Ту, в которой находится курсор, и четыре строки ниже.
Если нужно скопировать определенное количество слов, то
- курсор устанавливается на первый символ первого копируемого слова,
- вводится y,
- указывается количество копируемых слов,
- нажимается w (word – слово).
Комбинация yw копирует одно слово.
Скопировать один символ можно комбинацией yl, пять символов – y5l. Клавиша l здесь соответствует направлению движения. Вспомним, что сама по себе она перемещает курсор вправо.
Вышесказанное работает и для удаления нескольких слов или символов. В этом случае вместо y используется d.
Если вы попытаетесь скопированный таким образом в Vim текст вставить в другую программу, ничего не выйдет. В Vim работает свой буфер обмена, отдельный от системного.
Самым простым способом "обмена данными" будет выделение мышью блока текста, с последующим выбором через контекстное меню терминала пункта "Копировать". Аналогичным образом текст из внешнего источника можно вставить в Vim. Также в терминале Ubuntu работают горячие клавиши Ctrl+Shift+c, Ctrl+Shift+v.