2009-08-18 4 views
63

Я хочу запустить макрос, который я только что записал в регистре «x» на каждой отдельной строке открытого буфера, от моего курсора до конца буфера, в vim. Как мне это сделать?повторить макрос vim до конца буфера

Я знаю, что могу повторить макрос п раз:

[email protected] 

... или просто удерживать @, пока не достигнет последней строки, но я хочу, чтобы просто нажать несколько нажатий клавиш и сделать с Это.

Заранее спасибо.

+0

15 @ й не работает на Windows, GVim –

ответ

77

Лично я бы

VG:normal @x 

Edit: изменен регистр на один вы указали.

+0

Хороший. Мне нравится, что это решение работает только с выбранной областью. – Kevin

+0

Я сопоставил это с nnoremap <[email protected]> VG: norm @ q PAS

5

[email protected], если у вас есть очень большой буфер ...

+3

почему не только '%: нормальный @ x' или '1, $: normal @ x'? –

+3

это, безусловно, более элегантное решение - я думаю, что '99999 @ x' - это просто естественная вещь, с которой вы сталкиваетесь, когда вы спешите :) – Peter

+1

Не будет 9999999 @ x запускать ее много раз на последней строке, если только у вас ровно 999999 строк? –

17

сделать рекурсивный макрос:

[email protected] 

например:

[email protected] 

Это будет UPCASE первого слова из текущей строки в конец файла с одним @a. Но убедитесь, что «регистр пуст:

let @a="" 
+3

Отлично. Этот подход более полезен, чем подход «%: нормальный», поскольку он отличает любые движения линии внутри макроса, поэтому полезно, когда линии не идентичны по форме. Мне легче создать макрос «a» для определения действия, а затем макрос «b» выполнить рекурсивный бит, т. Е. Qb @ a @ bq. –

+2

Избегайте этого, если ваш макрос включает поиск, так как он будет продолжаться сверху. 'ctrl-c', если это произойдет! –

+2

@IainBallard, ': set nowrapscan' заставляет его терпеть неудачу и останавливаться при достижении конца файла. – ericbn

53

Вы можете сделать (в командном режиме)

:%normal @x 
0

От vim wiki, укороченная версия: QQQQQ для записи макросов @qq закончить запись @q выполнить его (и будут работать до конца файла)

+1

Возможно, вы добавите ссылку на документацию? – aturegano

+1

@aturegano Я думаю, что автор хотел использовать рекурсивный макрос. Для получения дополнительной информации см. [The Vim Wiki: Запись рекурсивного макроса] (http://vim.wikia.com/wiki/Record_a_recursive_macro). – dylnmc

Смежные вопросы