Консольный текстовый редактор Vi и его основные команды

0
2621

Сегодня я хочу немного рассказать о моем любимом текстовом редакторе под *nix системы и перечислить основные Vi команды. Этот редактор наиболее популярен у программистов, работающих в операционной системе GNU/Linux, их привлекает не только подсветка программного кода и прочие возможности этого редактора. Предпочтения к таким редакторам как Vi/Vim/Gvim, Emacs и Midnight Commander Editor складывались в том числе и исторически.

Традиционно эти редакторы вызывали уважение у многих пользователей и эти положительные отзывы влияли на новичков в мире Linux при выборе программы для работы с текстовыми данными. Да, это консольный редактор, но при всем разнообразии современных IDE, часто чересчур перегруженных дополнительным функционалом программ для разработки приложений, популярность Vi не уменьшается.

Редакторы Vi, Vim, и Gvim — это родственная группа программ, но это не одно и то же. Текстовый редактор Vi, а также его улучшенный аналог Vim является консольным редактором, а для тех кто привык работать в графической среде существует Gvim. Есть версия Vim в исполнении и под Windows.

команды редактора vi

Вот пример открытия файла в этом редакторе с определенными параметрами:

vi [параметры] [имя_файла]
При вводе команды квадратные скобки [ ] — не нужны!

-d — просмотр различий между файлами (допускается до трех имен файлов)
-m — открыть файл в режиме «защита от записи» (запрет на внесение изменений)
-r — открыть файл в режиме «только для чтения» (запрет на внесение изменений, но при указании специальной команды файл сохранить все-таки можно)


resume penguin

Vi отличается от других редакторов своеобразным разделением на два режима работы: режим ввода команды (режим по-умолчанию) и режим набора текста (режим вставки). В режиме ввода команды можно, собственно, вводить и выполнять различные команды редактора Vi, перемещаться по тексту, удалять отдельные символы и целые строки текста. Со вторым режимом набора текста, думаю, все понятно уже из названия. Если запустить Vi без указания имени файла, то откроется режим по-умолчанию — режим ввода команды. Нажав на I — вы перейдете в режим набора текста. В этом режиме нельзя перемещаться по тексту и удалять символы или строки! Можно только набирать текст и переходить на новую строку нажатием ENTER. Символ тильды (~) в начале строки означает, что этой строки нет. Сплошные тильды — конец файла. А вот вернуться обратно в режим ввода команд, можно нажав ESC. И только в этом режиме мы получаем возможность навигации по тексту — H, J, K, L (когда писали Vi еще не было стандартного курсора со стрелочками). Активный в данный момент символ можно удалить, если нажать на X. Стандартные кнопки удаления — не работают. Если возникла необходимость изменить какой-то отрывок текста, то нужно нажать на I и режим редактирования предложит ввести новый текст с той позиции на которой вы нажимали на I.


Вспоминается старый глюк MS Word где изменения вносимые в текст не добавлялись к существующим, а заменяли собой (перезаписывали) последующие символы. Этот глюк снимался только после закрытия/открытия файла. А не артефакт ли это?) Вопрос о заимствовании программного кода — к знатокам, но многие текстовые редакторы использовали и используют программный код Vi, это общеизвестный факт.

Многим такой подход к редактированию текста кажется неудобным. С Vim — все проще. В командном режиме работает стандартный курсор и стандартные клавиши удаления DEL и BACKSPACE. Также Vim умеет менять режимы на лету, в зависимости от ваших действий. В настоящее время чаще используется Vim. Например, в моем дистрибутиве по-умолчанию создан alias, который при выполнении команды vi в консоли вызывает редактор vim. Иными словами, в современных дистрибутивах GNU/Linux почти всегда будет использоваться именно редактор Vim.

Рассмотрим наиболее важные для первого ознакомления с этими редакторами команды:

:w[!] [имя_файла] — это команда сохранения файла.
При вводе команды квадратные скобки [ ] — не нужны! Последнее предупреждение)

Команда сохранит изменения активного файла. Но если вы открыли текстовый редактор Vi или Vim без указания имени файла и набрали текст то для того, чтобы сохранить этот текст в файл, вам надо ввести его имя после команды :w. Команда вида :w! — записывает файл даже в том случае, если одноименный файл уже есть в файловой системе, команда запишет изменения в файл даже если при открытии был указан параметр «только для чтения» (-r).

:saveas[!] [имя_файла] — данная команда сохраняет файл под другим именем.

:q[!] — закрытие текущего файла, если их открыто несколько и выход из программы, если файл был один. C :q! файл закроется даже если он был изменен или вообще еще не создан (просто набранный текст). А вот команда :qa[!] закроет программу даже если в ней открыто несколько файлов, в которые были внесены изменения.

DD — команда, которая удаляет активную строку текста, при этом она копирует ее в память. Команда P — это вставка удаленного текста, который сохранился в памяти. Так и осуществляется в Vi/Vim перенос текста.

Если нужно выделить отдельный отрывок текста, то в командном режиме нужно переместить курсор на начало отрывка, потом нажать V и выделить фрагмент. Команда X или D — удалит этот выделенный текст, при этом текст сохранится в памяти и его можно будет вставить в другое место.

А как скопировать нужный фрагмент текста без удаления? Для этого после выделения текста нужно нажать команду Y (или YY, если нужно скопировать отдельную строку), после чего командой P можно вставить предварительно скопированный фрагмент текста.

Лично я часто пользуюсь еще одной командой :r [имя_файла]. Она позволяет вставить в конец активного (открытого) файла содержимое указанного в команде файла.

Надеюсь, вам пригодится моя шпаргалка по основным командам консольного текстового редактора Vi, но возможности этого редактора велики и, наверняка, вам понадобятся команды поиска строки, перемещения по «закладкам» (списку файлов открытых в Vi). Вот на этом ресурсе можно найти объемный список команд Vim, Emacs и Nano.