vim: выполнение списка команд редактора - PullRequest
4 голосов
/ 02 декабря 2009

Есть ли способ в vim дать список команд редактора? Я хочу выполнить серию «глобальных» команд, и у команд есть некоторый шаблон. Поэтому в идеале я хотел бы создать список команд (используя поиск и замену регулярных выражений), а затем запустить их вместо необходимости вводить каждую команду.

Спасибо! Gaurav

Ответы [ 4 ]

8 голосов
/ 02 декабря 2009

(обновление: с / буфер / регистр / г)

Если вы можете восстановить все команды, которые хотите запустить в регистре, выполните регистр?

http://www.bo.infn.it/alice/alice-doc/mll-doc/linux/vi-ex/node24.html

Например, если у вас есть файл вроде:

abc
def
ghi
dd
dd

Тогда сделай

:g/dd/y A

Это объединяет все строки с dd и добавляет в регистр

Затем, если вы находитесь в первой строке файла, введите:

@a

Тогда будут удалены 2 строки, и файл должен выглядеть так:

ghi
dd
dd
1 голос
/ 02 декабря 2009

Звучит как макрос для меня. Макросы Google vim для множества полезной информации. В основном

  1. В командном режиме введите q, а затем еще одну букву, которая будет регистром, в котором мы будем хранить макрос. Например, 'qw'.
  2. Запустите команды, которые вы хотите сохранить для дальнейшего использования. Это может быть что угодно, включая замены регулярных выражений, движения, вставки, удаления и т. Д.
  3. Когда вы закончите, снова нажмите q. Теперь вы сохранили свои действия для дальнейшего использования. Чтобы повторить то, что вы только что сделали, наберите @w (или любую букву, которую вы использовали в регистре для сохранения макроса).

В макросах много силы. Иногда вы хотите сохранить макросы между сессиями. Когда я хочу это сделать, вы можете вставить макрос в буфер, вставив только что сохраненный регистр. Например, если вы сохранили макрос в регистре w, введите «wp, чтобы вставить регистр w (обратите внимание, что это двойная кавычка, а не две одинарные кавычки). Вы увидите несколько забавных символов, когда вы нажимаете escape или enter. удобочитаемые способы написания таких как и, но ^ [и ^ M тоже будут работать.

Теперь вы можете скопировать эти строки в регистр (я вижу, что кто-то только что опубликовал ответ с этим, но несколько иначе, чем я бы это сделал), выбрав текст в визуальном режиме и затем напечатав "wy. Это выдернет выделенный текст в регистр w. Теперь, чтобы запустить регистр как макрос, введите @w, как и раньше.

Если вы часто используете это, возможно, стоит сопоставить макрос с командой быстрого доступа в вашем .vimrc. Например, вот несколько карт, которые у меня есть в моем vimrc, чтобы помочь мне легко открыть и сохранить мой .vimrc

" For modifying the .vimrc
nmap ,e :e $HOME/.vimrc<cr>
nmap ,s :write!<cr>:source $HOME/.vimrc<cr>

Теперь, когда я редактирую любой файл и обнаруживаю новый макрос, я хотел бы сохранить, я набираю e, чтобы открыть мой .vimrc. Я вставляю макрос, добавляю оператор карты (есть разные карты в зависимости от того, в каком режиме вы находитесь, много документации, чтобы объяснить это, если вам интересно), и сохраняю .vimrc с, s, который также является источником .vimrc так что моя новая сопоставленная команда доступна в других файлах без перезапуска vim.

0 голосов
/ 14 марта 2010

Слово «команда» здесь довольно неоднозначно. Вы также можете выполнять команды Ex, которые были вытащены в регистр, используя : @» например, для регистра по умолчанию. Это особенно полезно, когда вы пишете код vimscript, например, в своем файле .vimrc, и вы хотите проверить функции или сопоставления, чтобы убедиться, что они работают нормально.

Итак, если у вас есть буфер, содержащий

tabedit /1110703/vim-vypolnenie-spiska-komand-redaktora
%s/intuited/The King Of Everything/g
w /tmp/superduperawesome.html
!/usr/bin/sensible-browser /tmp/superduperawesome.html

Вы можете использовать обычный режим действий

ggyVG:@"

, чтобы вызвать немного другую версию этой страницы.

Также возможно выполнить код, который хранится в регистре или в переменной, используя

:execute @"

но, похоже, с этим возникают некоторые странные проблемы: он прекращает выполнение, когда попадает в комментарий или в конец блока. У меня не было таких проблем с использованием: @ ".

0 голосов
/ 02 декабря 2009

Вот отображения для интерактивного запуска команд vim:

" run selected vimscript
vmap <Leader>r "vy:@v<CR>
" run vimscript line
nmap <Leader>r "vyy:@v<CR>

Проверьте справку vim для:

:h :@

Итак, в вашем случае (глупый пример):

:g/line/
:g/for/
:g/endfor/

for line in getline(1, 3)
  let @a = line
  @a
endfor

сохранить как .vim и: так%

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...