Статья из библиотеки сайта Макинтош и образование
Совет: Перед любыми действиями с документом введите следующую команду:
:set showmode
| vi filename | Открыть файл filename для редактирования |
| vi -r filename | Открыть последнюю сохраненную версию filename после аварийного выхода |
| vi filename file2 ... | Открыть filename, затем file2 ... Переход к следующему файлу - :n |
| ZZ или :wq или :x | Сохранить изменения и завершить 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 одинаковых строк.
Заметьте: вводится :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 |
Примечания:
Пример (выделены команды 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 | Показать имя файла, номер строки, общее число строк и положение в файле (%) |