5.5 Редактор VIM

Режимы работы

В ViM существуют 3 режима работы:

Основной – предназначен для просмотра файла, ввода команд и перехода из него в другие режимы. Из любого режима в командный можно попасть по нажатии <ESC>. При нажатии клавиши «:» становится доступна командная строка ViM, в которой можно вводить команды. Основные команды – команда выхода quit (ViM понимает сокращения, поэтому можно давать команду одной буквой «q»), команда сохранения write (или «w»), параметром которой может быть имя файла и вызов справки по, очевидно, help (или «h»). На остальные клавиши (и их последовательности) можно присвоить любое действие, либо использовать значения по умолчанию.

Визуальный – предназначен, в первую очередь, для выделения блоков текста. Для запоминания предлагаются 3 варианта перехода в этот режим – клавишей «v» для посимвольного выбора, <Shift>+v для построчного и <Ctrl>+v для блочного. В нормальном режиме (при переходе по «v») можно оперировать следующими сущностями: слово («w»), предложение («s»), параграф («p») и блок («b»). Выделение при этом начинать с позиции курсора («a»), или же с начала блока («i»). Например, выделение текущего блока (участка, ограниченного парными элементами) можно произвести следующим образом <Esc>vib. Копирование в буфер выделенного текста осуществляется по «y», вырезание по «d», а вставка соответственно «p».

Режим редактирования – переход в режим редактирования осуществляется нажатием клавиши <Ins>.

Основные возможности

Все возможности и команды редактора ViM перечислить весьма затруднительно (HTML-документация по нему занимает около пяти мегабайт), но на группе наиболее полезных остановиться необходимо. Перечисленные ниже команды вводятся в основном режиме (если нет специального уточнения). Все они имеют команднострочные аналоги и могут быть легко переопределены пользователями.

Переходы

Для перехода на строку с номером n воспользуйтесь командой G. Так, для перехода к началу текста наберите 0G, для сотой строки 100G, а для конца документа – $G. Для перехода на n символов в нужную вам сторону можете использовать клавиши со стрелками. То есть для перехода на 1000 символов вниз наберите 1000 и нажмите стрелку вниз.

Для перемещения по тексту используйте следующие команды: ”(”, ”)” для перемещения по предложениям, ”{”, ”}” для параграфов, ”[[”, ”]]” для функций, ”%” – переход к парной скобке, “”” – к предыдущему положению, а ”<CTRL>-O, <CTRL>-I” – соответственно назад и вперед по истории переходов.

Метки

Используются для отметки позиции ^метка, где меткой является любая буква) и быстрого к ней перехода (метка). Метки нижнего регистра действительны в пределах данного файла, метки же верхнего регистра действуют во всех открытых файлах. Список всех меток можно получить командой marks.

Регистры

В редакторе доступно множество именованных регистров (хранилищ данных, буферов). Регистр отмечается ””буква”. К нему применимы все стандартные действия – копирование в него (“меткаy), вырезание (“мета^), и вставка из него (“меткаp, можете вместо p использовать [p,]p для вставки соответственно перед, или после курсора). В режиме редактирования вставка из регистра осуществляется по ”<Ctrl>+R метка”. Для добавления данных в регистр используйте заглавную метку.

Также вы можете писать в регистр, воспользовавшись командой ‘^метка” и завершая запись по ”q”. Таким образом, вы сохраняете макрос, выполнить который можно по ”@метка”.

Регистры с метками ”*” и ”+” совпадают с X-Window clipboards, ”%” – соответствует редактируемому файлу. Для просмотра содержимого всех регистров воспользуйтесь командой :registers, либо :reg метка1метка2… для просмотра некоторых.

Фолды

Предназначены для сокрытия не нужных в данный момент данных, дабы те не отвлекали внимания. Например, кода подпрограммы с которой вы в данный момент не работаете. По умолчанию фолды активированы в режиме их ручной расстановки. Если вы хотите их автоактивации по отношению к табуляции, то добавьте в конфиг строку set foldmethod=indent. Все команды для работы с фолдами начинаются с ”z”. Открытие фолда производится, например, по zo (или стрелке вправо) на нем, закрытие кода в фолд – по zc.

Сессии

При ведении группы проектов нередко желательно сохранить текущее состояние и настройки редактора, чтобы в дальнейшем продолжить работу с того же места. Для этого и предназначены сессии, что создаются командой :mksession /path/to/Session.vim, а читаются простой командой :so /path/to/Session.vim. Гораздо чаще, впрочем, возникает нужда в сохранении не всей сессии, но только текущего контекста (в что входит, например, положение курсора в коде, текущая расстановка фолдов и много другое, о чем читайте в документации). Это действие выполняет команда :mkview, чтение – :loadview. Очень удобно сделать сохранение и чтение контекста автоматическим при начале и окончании редактирования файла. Это может быть реализовано следующим кодом (применяется для всех файлов, имеющих точку в имени):

au BufWinLeave *.* mkview au BufWinEnter *.* silent loadview

Поиск и замена

Поиск осуществляется командами ”/” для поиска (по регулярному выражению) вперед, а ”?” в обратном направлении. Для продолжения поиска используйте ”n”, а для прошлого варианта ”N”. Для поиска слова под курсором используются соответственно ”#” и ”*”.

Для поиска с заменой используйте ^s^TO/m что/gic, где ”%” означает работу со всем текстом (а не с текущей строкой), ”g” – глобальная замена (а не первое совпадение), ”i” – игнорирование регистра, а ”c” – подтверждение каждого действия.

Автодополнение

Производится по содержимому данного файла, а также указанных в переменной dictionary по нажатию клавиш ”.

Отмена

“u” для отмены и ” смена регистра.

“~” для выделенного участка (или буквы под курсором). “U” – принудительно установить верхний регистр, а “u”, соответственно, нижний.

Повторить

“.”.

Конфигурация

Основным конфигурационным файлом является ~/.vimrc. Активация русского шрифта в GUI-режиме, плюс выбор темы для обоих режимов осуществляется, например, следующим кодом:

if has("gui_running")
colorscheme candy
set guifont=-cronyx-courier-medium-r-normal-*-*-120-*-*-m-*-koi8-r endif
if !has("gui_running") colorscheme elflord endif

Перечень наиболее используемых «горячих» клавиши:

“Выход по F10 nmap <F10> :q<CR>imap <F10> <ESC>:q<CR>

“Сохранение по F2

nmap <F2> :w<CR>
imap <F2> <ESC>:w<CR>i<Right>

“Компиляция по F9

nmap <F9> :make<CR>
imap <F9> <ESC>:make<CR>

Если вы нашли ошибку, выделите текст и нажмите Ctrl+Enter.