Terminal

Справка по редактору vi. Основные команды

В этой заметке приводятся наиболее ходовые команды консольного текстового редактора vi.

Наиболее распространенные команды консольного текстового редактора vi.

Содержание


Совет: Перед любыми действиями с документом введите следующую команду:

:set showmode


Запуск и завершение VI

vi filenameОткрыть файл filename для редактирования
vi -r filenameОткрыть последнюю сохраненную версию filename после аварийного выхода
vi filename file2Открыть filename, затем file2 … Переход к следующему файлу — :n
ZZ или :wq или 😡Сохранить изменения и завершить VI
:wСохранить изменения в текущем файле
:w!Безусловно сохранить текущий файл
:w fileСохранить текущий файл под именем file
:q!Завершить VI без сохранения

К началу страницы

Режимы

VI работает в командном режиме и режиме ввода. Сразу после запуска редактор находится в командном режиме, в котором можно перемещаться по тексту, выполнять копирование и вставку текста из буфера. Режим ввода включается по командам вставки, дополнения, замены. Нажатие [ESC] возвращает редактор в командный режим. Большинство команд выполняется сразу после нажатия клавиши. Исключение — команды строчного редактора ex, начинающиеся с двоеточия, которые выполняются после нажатия [Return].

К началу страницы

Вставка текста

iВставка перед курсором
IВставка перед строкой
aДобавление за курсором
AДобавление после строки
:r fileВставить содержимое file после текущей строки
В режиме ввода:
CTRL-i или TABВставить смещение вправо на shift width
CTRL-dУменьшить смещение вправо на shift width
CTRL-h или BackspaceУдалить предыдущий символ
CTRL-wУдалить предыдущее слово
CTRL-uУдалить предыдущую строку

К началу страницы

Перемещение по тексту

hВлево
jВниз
kВверх
lВправо
«стрелки»Перемещение по тексту (в больших файлах работает медленно, в некоторых конфигурациях может работать некорректно).
wК следующему слову
bК началу слова
^К первому непробельному символу строки
+ или <cr>К первому символу следующей строки
К первому непробельному символу предыдущей строки
eК концу слова
(К началу предложения
)К концу предложения
{К началу абзаца
}К концу абзаца
Примечание: абзацы разделяются пустой строкой.
0 или |К началу строки
$В конец строки
1GК первой строке файла
GК последней строке файла
HК верхней строке экрана
LК нижней строке экрана
CTRL-dПрокрутка вниз на пол-экрана
CTRL-fПрокрутка вниз на экран
CTRL-uПрокрутка вверх на пол-экрана
CTRL-bПрокрутка вверх на экран
%К парной скобке: ( ), { }, [ ]

К началу страницы

Удаление текста

Большинство команд удаления образуются из символа d и команды перемещения. Например, dw удаляет слово. Другие команды удаления:

xУдалить текущий символ
nxУдалить n символов вправо, начиная с текущего
XУдалить символ слева от курсора
nXУдалить n символов влево от курсора
dd или :dУдалить текущую строку
«(a-z)ddВырезать текущую строку в именованный буфер (от a до z)

К началу страницы

Копирование в буфер

Подобно командам удаления, большинство команд копирования в буфер состоят из символа y и команды перемещения. Например, y$ помещает в буфер конец строки.

yy или :yКопировать текущую строку
«(a-z)yyКопировать текущую строку в именованный буфер (от a до z)

К началу страницы

Изменение текста

Команды изменения действуют как команды удаления с последующим переводом в режим ввода. Большинство из них состоит из символа c и команды перемещения. Например cw заменяет слово.

Вставка из буфера

pПоместить текст из буфера после курсора
PПоместить текст из буфера перед курсором
«(a-z)p или «(a-z)PПоместить текст из буфера (от a до z) после/перед текущей строкой

Буферы

Имя буфера может быть указано перед любой командой удаления, изменения, копирования или вставки. Префикс имеет вид «c, где c — любой символ нижнего регистра. Например, «adw удаляет слово и помещает его в буфер a. Затем его можно будет поместить в текст по команде «ap.

К началу страницы

Поиск/замена подстрок

/strПоиск str вперед от курсора
?strПоиск str назад от курсора
nПовторить поиск в том же направлении
:n,ms/str1/str2/optИскать строку str1 со строки n до m (n и m могут быть опущены); заменить str1 на str2; с опциями opt. Возможные опции: g — глобальный, c — подтверждать замены (y — заменить, <cr> — не заменять), p — печатать измененные строки
&Повторить последнюю команду :s
:g/str1/s/str2/str3/Найти строку, содержащую str1, заменить str2 на str3
;Повторить поиск
,Повторить поиск в обратном направлении

К началу страницы

Регулярные выражения

. (точка)Любой символ, кроме «новой строки»
*0 или более вхождений любого символа
[…]Любой из указанных символов
[^…]Любой из символов, кроме указанных
\<Строго в начале слова
\>Строго в конце слова
^В начале строки
$В конце строки
\(…\)Группа условий
\nЗначение n-ой группы
\Отмена значения спецсимвола (например, \$ позволяет искать символ $)
\\Отмена особого действия символа \

Счетчики

Практически перед любой командой можно указать количество ее повторений. Например, 5dw приведет к удалению 5 слов, а 3fe — к перемещению курсора вперед на 3-е вхождение символа «e». Подобным образом можно действовать и с командами вставки, например, вставить 100 одинаковых строк.

К началу страницы

Режимы VI

Заметьте: вводится :set option для включения режима и :set nooption для выключения. Чтобы установить настройки для каждого запуска VI, в домашнем каталоге создается файл .exrc, содержащий данные команды без двоеточия перед ними.

:set aiАвтоматический отступ (по предыдущей строке)
:set allВывести на экран все режимы
:set ebЗвуковой сигнал при ошибках
:set icИгнорировать регистр при поиске
:set listПоказывать символы табуляции (^l) и конца строки ($)
:set nu
:set number
Показывать номера строк
:set showmodeПоказывать текущий режим в нижней части экрана
:set showmatchПодсвечивать парную открывающую скобку при вводе закрывающей
:set waИсключить нормальную проверку перед записью
:set wm=nУстановить размер правого поля для автопереноса. Для отключения автопереноса n=0

К началу страницы

Макросы

Примечания:

  • Файл «.exrc» в домашнем каталоге может содержать набор макросов, используемый при каждом запуске VI (записываются аналогично командам определения макросов, но без двоеточия).
  • Чтобы включить в макрос управляющий символ, например, ESC, следует предварительно нажать CTRL-v.
  • Чтобы включить в макрос кавычки («), перед ними набирается \ (backslash).
  • Неиспользуемые в vi клавиши: K V Z g q v * = [ ] @ # и функциональные.

Пример (выделены команды VI, которые будут включены в макрос):

:map v /I CTRL-v ESC dwiYou CTRL-v ESC ESC

Действие макроса: При нажатии v найти «I» (/I ESC), удалить слово (dw) и вставить «You» (iYou ESC). CTRL-v нужно для вставки кода ESC

:map key cmd_seqНазначить клавише key исполнение макроса cmd_seq
:mapПоказать в строке состояния все имеющиеся макросы
:unmap keyУдалить макрос
:ab str stringПри вводе сокращения str заменить его на string
:abПоказать все сокращения
:una strОтменить сокращение str

К началу страницы

Прочее

~Смена регистра символа над курсором
JСлияние следующей строки с текущей
nJСлияние n строк
.Повторить последнюю команду, изменяющую текст
uОтменить последнее изменение
UОтменить все изменения в строке
CTRL-GПоказать имя файла, номер строки, общее число строк и положение в файле (%)

К началу страницы