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