Vim - это один из самых популярных текстовых редакторов среди гиков и программистов. Он имеет особый интерфейс управления, с помощью которого вы можете очень быстро набирать и модифицировать текст не отрывая пальцев от клавиатуры. Редактор достаточно сложен в обучении, но если его освоить, то работать с текстом будет намного легче.
Мы уже обсуждали редактор Vim в статье как пользоваться vim. Но там были рассмотрены только более общие моменты работы с редактором. В сегодняшней статье мы остановимся на командном режиме, а именно, на командах, которые можно вводить с помощью двоеточия. Именно с помощью таких команд будет выполняться большинство действий с файлами. Существуют команды редактора Vim для решения различных задач, сегодня мы рассмотрим большую часть из них.
Содержание статьи
Что такое команды Vim
Вообще, команды Vim linux - это все сочетания клавиш, которые нажимаются в командном режиме. Но мы уже обсудили их как можно подробнее в предыдущей статье, поэтому в этой остановимся только на специализированных командах расширенного режима, их параметрах и переменных. Это тоже обширная тема.
Чтобы активировать расширенный режим редактора (Ex), его нужно запустить с опцией -e. Или для выполнения одной команды нужно ввести двоеточие. Синтаксис команд расширенного режима такой:
[адрес] [команда] [!] [параметры]
Все части команды необязательны, в определенной команде может использоваться только одна или несколько из них. Чтобы перечислить несколько команд подряд используйте символ "|". А теперь рассмотрим детальнее что означает каждый из этих пунктов:
- Адрес - указывает набор данных, над которыми будет выполнять операции команда. Можно указать адрес начала и конца фрагмента, адресовать только внутри строки и многое другое;
- Команда - сама команда, которая сообщает программе что ей нужно сделать;
- ! - в некоторых командах список аргументов отделен восклицательным знаком;
- Параметры - команда может принимать различные параметры, чтобы определить что нужно делать с теми или иными данными, например, файл, флаги, регулярные выражения и так далее.
Это все довольно сложно, поэтому хватит теории и перейдем сразу к практике, где все сразу станет на свои места.
Команды редактора Vim
А теперь давайте рассмотрим команды vi в расширенном режиме. Все команды отсортированы в алфавитном режиме.
abbreviate
:abbreviate - команда позволяет создавать аббревиатуры. Это очень удобно. Вы набираете сокращенное слово, а затем программа автоматически заменяет его на полный вариант.
ab без параметров показывает все созданные аббревиатуры:
Создадим аббревиатуру, которая будет заменять tst на test:
Дальше просто вводите текст в режиме редактирования.
append
Позволяет перейти в режим редактирования, аналогично клавише a. Просто наберите команду и продолжайте набирать текст:
Также можно добавить знак восклицания, он заставит команду начать вставку с новой строки:
Перед командной можно указать адрес строки, после которой нужно начать добавлять текст, например, после первой:
args
Позволяет отобразить список файлов, которые сейчас редактируются:
buffers
Отображает список активных буферов (открытых файлов):
buffer
Переключает в указанный буфер, например, чтобы переключиться в первый буфер выполните:
Если текущий буфер не сохранен, для перехода нужно добавить восклицательный знак.
cd
Команда cd позволяет изменить текущий каталог программы. В параметрах ей нужно передать путь:
Если файл не сохранен, команда не будет выполнена, чтобы это обойти используйте восклицательный знак.
copy
Команда позволяет скопировать диапазон строк. Ей нужно передать адрес строк, которые нужно скопировать и адрес для вставки. Если адрес для вставки не передать, то строки будут вставлены в начало файла. Синтаксис:
[адрес]copy адрес_вставки
Например, скопируем первых четыре строки, нумерация начинается с нуля, и вставим их после четвертой:
Чтобы указать адрес диапазона используйте запятую.
edit
Открывает новый файл для редактирования. Старый файл не закрывается, а для нового открывается новый буфер, который сразу выводится на экран. Команде можно передать номер строки, с которой нужно начать, и имя файла. Имя может быть задано в виде регулярного выражения.
file
Команда позволяет переименовать файл. Если файл уже существует, то необходимо добавить восклицательный знак.
global
Команда global позволяет выполнять поиск по регулярному выражению в документе. Ей можно передать диапазон строк, в которых нужно искать. Синтаксис:
:[адрес] global /выражение/параметры
Например, такая команда выведет все вхождения слова Vim во всем документе:
А эта только в первых пяти строчках:
join
Команда позволяет объединить несколько строк. Команде нужно передать адрес и количество строк, которые нужно объединить. Перевод строки будет заменен пробелом.
Или
list
Отображает все символы текущей или указанной в адресе строки визуально недвусмысленным образом. Табуляции отображаются в виде ^I, конец строки - $. Флаг # позволяет включить нумерацию строк.
map
Команда похожа на ab, но вместо аббревиатур создает макросы. Когда вы набираете указанное сочетания выполняется команда или действие. Если указан восклицательный знак - применяется в режиме вставки, иначе - в командном.
Например, создадим макрос для отображения номеров строк:
После этого достаточно набрать sn.
mark
Эта команда позволяет создавать метки в тексте, чтобы потом иметь возможность к ним быстро перейти нажатием нескольких клавиш. Метка создается для текущей строки и позиции курсора. В качестве имени метки используется строчная или заглавная буква. Строчная создает метку для текущего буфера, а заглавная для всех открытых вкладок.
Также можно указать адрес строки, для которой вы хотите создать метку. Затем, чтобы перейти к метке, просто наберите в командном режиме:
move
Команда позволяет переместить часть текста по указанному адресу. Если адрес не указать, то текст перемещается в начало. Например, переместим строки 4, 5 и 6 в начало:
next
Перейти к редактированию следующего файла в списке аргументов:
number
Позволяет отобразить нужное количество строк, начиная с текущей, вместе с их номерами:
put
Вставка скопированного или удаленного участка текста в буфер. Если буфер не указан, то будет использован, недавно измененный.
read
Считывает содержимое файла и вставляет его в текущий файл после заданной строки. Если перед именем файла указать восклицательный знак, он будет выполнен как системная команда, а вывод будет записан в качестве содержимого.
rewind
Сбрасывает указатель списка аргументов на начало и открывает для редактирования первый файл.
set
Это одна из самых часто используемых команд. Она позволяет установить значение переменных, которые во многом определяют поведение редактора. Если параметров не задать, то будут выведены все существующие переменные. Синтаксис команды:
:set имя_переменной=значение
Чтобы получить все возможные переменные наберите:
Например, сообщаем редактору, что нужно показывать номера строк:
Или отключаем показ номеров строк:
shell
Эта команда позволяет получить доступ к командной оболочке системы, например, bash, прямо из редактора.
source
Выполняет команды редактора из указанного файла. В файле могут быть записаны различные команды расширенного режима, в том числе и команда source.
substitute
Это команда для поиска строки по всему документу или в заданном диапазоне и замены ее на нужную. Вот ее синтаксис:
:[адрес]s/шаблон_поиска/на_что_заменить/опции
По умолчанию будет заменено только первое вхождение.
Чтобы заменить все найденные нужно добавить опцию g:
Можно использовать не только обычный текст, но и регулярные выражения. Опция i, сообщает утилите что нужно не учитывать регистр.
unabbreviate
Удаляет все ранее созданные сокращения с помощью команды ab. Например, удалим аббревиатуру tst:
undo
Отменяет последнее изменение или несколько изменений. Нельзя только отменять команду edit и системные команды.
unmap
Удаляет созданный ранее макрос или все макросы.
write
Эта команда используется для сохранения изменений. Если у файла еще нет имени, его нужно задать в этой команде. Если перед именем файла указать !, то будет вызвана системная команда, а данные переданы ей на ввод. Чтобы сохранить файл, доступный только для чтения нужно добавить восклицательный знак после команды.
wq
Аналогично команде write, только после записи завершает сеанс работы с редактором.
quit
Закрывает редактор, если изменения не были сохранены, а редактор нужно закрыть, то добавьте восклицательный знак:
Выводы
Это были все самые важные команды редактора Vim в расширенном режиме которые вы можете использовать для решения своих задач. Многие из них достаточно сложны, но если разобраться то все это может быть очень полезным и намного ускорить вашу работу с редактором. Надеюсь, эта информация была полезной для вас.
На завершение видео со сравнением Emacs, Vim и IDE:
Может быть Вы знаете? Как в Vim объединить строки в 2 столбца? Т.е., например, есть файл из 100 строк. И мне нужно 1-ю строку объединить с 51-й, 2-ю с 52-й, 3-ю с 53-й ........., 50-ю с 100-й.