31
января
0

Вкладки, регистры, макросы, замена текста в VIM



Эта статья для тех, кто уже знаком с основами работы в текстовом редакторе VIM. Надеюсь, что в данной заметке каждый найдет что-то полезное для себя в дальнейшей работе. Здесь мы рассмотрим использование вкладок для более удобной манипуляции с открытыми файлами, разных буферов обмена для хранения используемого в работе текста, запись часто повторяющихся действий, быструю и легкую замену фрагментов текста в документе и сохранение ранее открытых сессий со всеми настройками.

Вкладки или табы

Если при начальном запуске vim с несколькими файлами-аргументами задать ключ «-p», то они будут открыты во вкладках. Вкладки — это те же буферы, в которые помещается документ после открытия, только навигация по ним проходит по другому. Более наглядно и привычно происходит перемещение между файлами.

Основные команды для работы с вкладками:

:tabnew [file] / :tabe[dit] [file] – создать новую вкладку, а если указано название файла, то создать его либо открыть в новой вкладке;
:tabc[lose] [N] – закрыть текущую вкладку или под номером «N»;
:tabo[nly] – закрыть все вкладки кроме текущей;
:tabfir[st] – перейти на первую вкладку;
:tabl[ast] – на последнюю;
:tabp[revious] – обратно на предыдущую;
:tabn[ext] [N] – перейти на следующую вкладку либо с номером «N»;
:tabm[ove] [N] – переместить текущую на место после после «N»-ой вкладки;
:tabs – показать список вкладок c номерами и открытыми файлами;
:tabdo {cmd} – выполнить команду «cmd» во всех вкладках;
:tab ball – поместить все открытые файлы (буферы) во вкладки.

Для управления/перемещения по вкладками также можно использовать комбинации клавиш:

Ctrl+w gf – открыть в новой вкладке файл, имя которого расположено под курсором;
[N]gt – перейти на следующую вкладку или под номером «N»;
gT – перейти на предыдущую.

Регистры — буферы обмена редактора VIM

В регистры помещается в основном информация, которая была удалена либо скопирована. Позже обращаясь к определенному регистру можно вставить в файл содержащийся в нем фрагмент текста. Предусмотрен свой метод доступа к каждому виду регистров:
«» – безымянный регистр (используется по умолчанию). Сюда попадают фрагменты текста, которые последние подвергались операции копирования или удаления. Если в качестве целевого регистра при копировании указать безымянный регистр, то запись осуществляется в регистр “0.
«0, «1-«9 – нумерованные (сдвиговые) регистры. «0 cодержит текст скопированный в последней операции, если целевым регистром был безымянный. Регистр «1 содержит последний удалённый текст, который содержит хотя бы одну полную строку. После следующего удаления происходит замещение содержимого регистра «1, а его содержимое перемещается в «2 и так далее до регистра «9. Содержимое регистра “9 безвозвратно теряется.
«- – удаленные фрагменты, занимающие менее одной строки;
«a-z – именованные регистры, которые заполняются только при указании их специально пользователем. При этом если указывается строчная буква, то фрагмент будет перезаписан, а если заглавная («A-Z), то фрагмент будет добавлен к существующему. Неоценимая польза в использовании для часто копируемых данных и сбора в один буфер обмена кусков текста с разных частей документа;
«. – содержит последний вставленный текст;
«% – содержит имя редактируемого файла;
«# – содержит имя альтернативного файла (который редактировался перед текущим);
: – последняя выполненная команда в нормальном(основном) режиме;
«= – регистр выражения, содержит результат вычисления выражения, которое будет введено;
«* и «+ – буфер обмена для работы с другими приложениями;
«/ – регистр содержит выражение последнего поиска;
«_ – регистр “Черная дыра” используется только для записи и при вставке из этого регистра ничего не происходит.

Использование регистров:

«aD – удалить текущую строку в регистр «а»;
«a2Y – скопировать две строки в регистр «а»;
«Add – удалить и дописать текущую строку в регистр «a»;
«a[pP] – вставить содержимое регистра «а» после или перед текущей строкой;
достаточно удобно выделять текста в визуальном режиме, а потом помещать его в какой-нибудь буфер обмена;
< Ctrl+r>[reg_name] – для вставки содержимого регистра в режиме вставки, например, <Ctrl+r>a вставит содержимое регистра «а»;
:reg [reg_type] – показать содержимое регистров или какого-то определенного заданого.

Макросы

Для автоматизации работы и записи часто повторяющихся действий можно использовать макросы. Запись введенных команд производится непосредственно в именованные регистры. Важным моментом при работе с макросами является то, что существующий макрос можно расширить. Также как и в случае с именованными регистрами, можно использовать заглавную букву для добавления действий к уже имеющимся.
q{a-z} – начать запись макроса в указанный именованный регистр;
q – окончить запись;
@{a-z} – воспроизвести макрос, сохраненный в указанном регистре.
<Ctrl+r>{a-z} – используется для выполнения макроса в режиме вставки.

Поиск — замена — удаление

Для замены некоторых вхождений «слова» можно воспользоваться каким-либо методом поиска из «/», «?», «*», «#», потом перемещаясь по совпадениям «n» / «p», заменить с помощью «cw» первое нужное и затем последующие, повтором предыдущей команды редактирования «.». Кроме хорошо реализованного поиска, в VIM также присутствует замена фрагментов текста, используя шаблоны с поддержкой регулярных выражений, что служит очень мощным средством для внесения требуемых изменений. В простейшем случае замена одного слова на другое в какой-то части текста или во всем файле уже достаточно экономит время. Также доступно удаление строк, подпадающих под какой-то шаблон.

Общий вид команды замены:

:[address]s/old/new/[gci]
[address]:

% – во всем тексте файла;
N – в строке с номером «N»;
. – в текущей строке;
$ – в последней;
N,M – между строками «N» и «M».
В визуальном режиме адрес можно не указывать, и изменения происходят в выделенной области.
[gci]:
g – все вхождения в текущей строке выражения «old» (если не указано, то только первое совпадение);
c – с запросом подтверждения;
i – игнорировать регистр.

Примеры использования замены и удаления:

:g/search/s/old/new/ – заменяет «old» на «new» в строках, содержащих «search» (:g/search/ ищет строки, которые будут обрабатываться, а :s/old/new/ производит в них автозамену;
:g/string/d – команда удалит все строки, содержащие “string”;
:v/string/d – удалить строки, не содержащие “string”;
d/search – удаляет текст начиная с текущего положения курсора вплоть до первого встреченного «search», не включая его;

%s/old/new/g – замена во всём буфере «old» на «new»;
:7,$s/old/new/g – заменить начиная с 7 строки и до конца файла;
:%s/$/ end/g – добавить в конец каждой строки слово «end»;
:%s/ *$//g – удалить все пробелы;
:%s/\r//g – удалить символ возврата каретки;
:%s/\s\+$// – удалить пробельные символы в конце строк

Использование .viminfo

VIM сохраняет информацию о редактировании между сессиями в текстовом файле ~/.viminfo, которая может восстановить предыдущий сеанс редактирования и «запомнить» какие файлы были открыты, окна, табы, где в них находился курсор во время закрытия, текущее содержимое регистров, метки, привязки клавишь, историю поиска и команд, и т.д.
Можно использовать свои собственные файлы:
:wviminfo! ~/.vim/viminfo – записывает текущую информацию в данный файл;
:rviminfo! ~/.vim/viminfo – восстанавливает ее.
Также доступны команды:
:mksession! ~/.vim/session – сохраняет информацию о текущей сессии в данный файл;
:source ~/.vim/my_session – восстанавливает сохраненную ранее сессию (либо при запуске VIM указать «-S ~/.vim/session»);

Полезным также будет знание аналогов стандартных клавиш для владеющих десятипальцевым слепым методом набора:

<Ctrl+[> – <Esc>
<Ctrl+i> – <TAB>
<Ctrl+h> – <BackSpace>
<Ctrl+m> – <Enter>

Понравилась статья?
Подписаться на RSS feed
Оставить комментарий