Наиболее распространенные команды консольного текстового редактора 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 | Показать имя файла, номер строки, общее число строк и положение в файле (%) |