Vi был первым из существующих ныне полноэкранных редакторов. Vi является одним из главных объектов для нападения со стороны противников UNIX, и в то же время одним из главных аргументов ее защитников: с одной стороны он несколько сложноват в изучении, но он становится чрезвычайно мощным инструментом как только человек набирается опыта в его использовании. Несколькими нажатиями клавиш пользователь может "воротить горы" и, кроме Emacs, немного есть текстовых редакторов, которые могут похвастаться тем же самым.
В действительности с Mandrake Linux поставляется vim VI iMproved (VI улучшенный), но в этом разделе мы будем называть его Vi .
Для начала нам нужно запустить Vi, что делается также, как и для Emacs. Итак, вернемся к двум файлам и наберем:
$ vi file1 file2 |
Вы увидите следующее Рисунок 4.4. Начальная позиция в VIM.
Теперь вы в командном режиме перед первым открытым файлом. В командном режиме вы не можете вставлять текст в файл... Чтобы это сделать, нужно перейти в режим вставки, и, следовательно, ввести одну из команд, которые позволят вам это сделать:
В режиме вставки вы будете видеть строку --INSERT-- внизу экрана (таким образом, вы будете точно знать в каком режиме вы находитесь). В этом, и только в этом режиме вы можете набирать текст. Чтобы вернуться в командный режим, наберите Esc.
В режиме вставки вы можете использовать Backspace и DEL для удаления текста по ходу. Для перемещения по тексту в обеих режимах, командном и вставки, используйте клавиши со стрелками. В командном режиме существуют еще и другие комбинации клавиш, которые мы рассмотрим позже.
ex режим доступен по нажатию клавиши : в командном режиме. Те же : появляются внизу экрана и курсор перемещается туда. Все, что вы наберете потом, завершенное нажатием Enter, будет рассмотрено Vi как команда ex. Если вы удалите команду и все напечатанное в :, вы вернетесь в командный режим и курсор переместится на свою прежнюю позицию.
Чтобы сохранить изменения в файл, наберите :w в командном режиме. Если вам нужно сохранить содержимое буфера в другой файл, наберите :w <имя_файла>.
Также как и в Emacs, вы можете работать одновременно с несколькими буферами, отображенными на экране. Чтобы так делать, используйте команду :split.
Чтобы перемещаться от одного файла к другому в буфере, набирайте :next для перемещения к следующему файлу и :prev соответственно к предыдущему файлу. Вы можете также использовать :e <имя_файла>, что позволит вам перейти к нужному файлу если он уже открыт или открыть другой файл. Здесь снова работает заполнение.
Для смены буфера наберите Ctrl+w j и вы перейдете в буфер ниже или Ctrl+w k чтобы перейти к буферу выше. Можно также использовать клавиши со стрелками вместо j или k. Команда :close прячет буфер, команда :q его закрывает.
Будьте внимательны, потому как Vi весьма привередлива: если вы попытаетесь спрятать или закрыть буфер с несохраненными данными, команда не выполнится и вы получите следующее сообщение:
No write since last change (use! to override) (Не было записано с предыдущих изменений (используйте ! для перезаписи))
В таком случае сделайте так, как сказано и наберите :q! или :close!.
Кроме клавиш Backspace и DEL в текстовом режиме, Vi имеет множество других команд для удаления, копирования, вставки и замены текста в командном режиме. Здесь мы рассмотрим некоторые из них. Все команды, показанные здесь фактически можно разделить на две части: команда для выполнения действия и символ эффекта. Действия могут быть такими:
Эффект определяет то, с какой группой символов работает команда. Вот команды эффекта, соответствующие перемещениям, которые вводятся в командном режиме:
h, j, k, l: один символ влево, вниз, вверх, вправо[11] соответственно;
e, b, w: к концу (соотв. началу) текущего слова; к началу следующего слова;
^, 0, $: к следующему не пустому символу текущей строки, в начало текущей строки, в конец текущей строки;
f<x>: к следующему появлению символа <x>; например, fe перенесет курсор к следующему встречающемуся символу e;
/<string>, ?<string>: к следующему совпадению строки или регулярного выражения (regexp) <string>, и то же самое назад в файле; например, /foobar перемещает курсор пока не появится следующее слово foobar;
К каждому из этих символов эффекта или командам перемещения можно добавлять номер повторения. Для G это ссылается на номер в файле. На этой основе вы можете создавать все варианты комбинаций.
Это правда, что эти команды не очень интуитивны, но здесь дело в практике. Тем не менее, как вы можете видеть, выражение “перемещать горы несколькими клавишами” не сильно далеко ушло от истины :-)
У Vi есть команда для копирования текста, которую мы уже видели: y. Для вырезания текста просто используйте команду d. У вас есть 27 блоков памяти для хранения текста: анонимный блок и 26 именованных маленькими буквами алфавита.
Для использования анонимного блока памяти вводите команду как есть. Так, команда y12w копирует в анонимную память 12 слов после курсора. [12]. Используйте d12w, если нужно вырезать эту область.
Чтобы использовать один из 26 именованных блоков памяти, введите выражение "<x> перед командой, где <x> задает имя памяти. Таким образом, для копирования тех же 12 слов в память k, вы пишите "ky12w, и "kd12w для того, чтобы вырезать их.
Для помещения содержимого в анонимную память используются команды p или P (для Вставки (Paste)), чтобы вставить текст после или до курсора соответственно. Для вставки содержимого в именованную память, используйте "<x>p или "<x>P таким же образом (например, "dp вставит содержимое памяти d после курсора).
Давайте посмотрим на пример Рисунок 4.5. VIM, перед копированием текстового блока.
Чтобы выполнить это действие, мы :
скопируем первые 6 слов предложения в память r (для примера): "ry6w [13];
Мы получили ожидаемый результат, как показано здесь Рисунок 4.6. VIM, после того, как скопирован текстовый блок.
Поиск по тексту очень прост: в командном режиме вы можете просто написать / перед текстом искомой строки и нажать Enter. Например, /party будет искать строку party от текущей позиции курсора. Нажатие n перемещает на следующее найденное совпадение, а если вы достигли конца файла, поиск начнется с начала файла. Чтобы искать в обратном порядке, используйте ? вместо /.
Для выхода существует команда :q (фактически, эта команда закрывает активный буфер, как мы уже видели, и, если это единственный из открытых буферов, вы просто выйдете из Vi). Это сочетание клавиш годится только тогда, когда вы редактируете только один файл. Итак, чтобы выйти вы будете использовать:
Вы должны знать, что если у вас есть несколько буферов, :wq запишет активный буфер и закроет его.