Макрос для создания нумерованных списков в vim? - PullRequest
23 голосов
/ 19 ноября 2010

Часто мне кажется, что у меня есть список предметов, и мне нужно добавить цифры перед ними. Например:

Item one
Item two
Item three

Что должно быть:

1. Item one
2. Item two
3. Item three

В vim я могу нажать I в режиме редактирования, вставить «1.», нажать escape. Затем я перехожу к следующей строке, нажимаю ., а затем ^A, чтобы увеличить число. Это кажется крайне неэффективным ... как бы я сделал макрос, чтобы я мог перейти к следующей строке и вставить в начале число, которое на одну единицу больше, чем строка раньше?

Ответы [ 6 ]

21 голосов
/ 19 ноября 2010

Вы можете легко записать макрос для этого.

Первая вставка 1. в начале первой строки (после 1. есть несколько пробелов, но вы их не видите).

Перейдите в начало второй строки и перейдите в режим записи с помощью qa.

Нажмите следующую последовательность клавиш:

i                         # insert mode
<ctrl-Y><ctrl-Y><ctrl-Y>  # copy the first few characters from the line above  
<ESC>                     # back to normal mode
|                         # go back to the start of the line
<ctrl-A>                  # increment the number
j                         # down to the next line
q                         # stop recording

Теперь вы можетевоспроизведите запись с помощью @a (в первый раз; в последующие времена вы можете сделать @@, чтобы повторить последний выполненный макрос), и он добавит новое увеличенное число в начало каждой строки.

13 голосов
/ 19 ноября 2010

Выберите ваши строки в визуальном режиме с помощью: V, затем введите:

:'<,'>s/^\s*\zs/\=(line('.') - line("'<")+1).'. '

Что легко ввести в команду:

command! -nargs=0 -range=% Number <line1>,<line2>s/^\s*\zs/\=(line('.') - <line1>+1).'. '
6 голосов
/ 19 ноября 2010

Есть также несколько плагинов для выполнения этого вида работы, если вам приходится делать это время от времени:

http://vim.sourceforge.net/scripts/script.php?script_id=670

2 голосов
/ 17 февраля 2015

Возможно, это не решение для макроса, но, по крайней мере, это просто.

добавление чисел ко всем строкам

Возможно использовать :%!nl -ba или :%!cat -nКоманды, которые будут добавлять номера строк во все строки.

В Windows необходимо установить Cygwin / MSYS / SUA .

добавить номера ввыделенные строки

Чтобы добавить числа только для выбранных строк, выберите их в визуальном режиме ( v и курсоры), затем, когда закончите, выполните команду: :%!nl (игнорироватьпустые строки) или :%!cat -n (включая пустые строки).

форматирование

Чтобы удалить лишние пробелы, выделите их в визуальном блоке ( Ctrl + v ) и удалите их ( x ).

Чтобы добавить несколько символов (., :, )) после чисел, выберитеих в визуальном блоке ( Ctrl + v ), затем добавьте символ ( A , введите символ, затем закончите с Esc ).

2 голосов
/ 19 ноября 2010

Вы можете использовать функцию записи. Это простой способ записи макросов в Vim.

См .: справочная запись

В обычном режиме 'qa', чтобы начать запись того, что вы вводите в регистр 'a' Введите необходимую команду, чтобы вставить число в начале строки, скопируйте его в следующую строку и используйте CTRL-A, чтобы увеличить его значение. 'q', чтобы закончить запись затем '@a', чтобы воспроизвести макрос, хранящийся в регистре 'a' ('@@' повторите последний макрос).

И вы можете сделать что-то вроде '20 @a ', чтобы сделать это двадцать раз подряд.

Очень удобно повторять изменение текста.

В зависимости от случаев его проще или сложнее использовать, чем регулярное выражение.

0 голосов
/ 07 ноября 2016

Вставьте число в начале блока текста, например.

1. Item One

Введите команду vim normal mode следующим образом:

qb^yW+P^<Ctrl-A>q

Это означает:

qb       # start recording macro 'b'
^        # move to start of text on the line
yW       # 'yank' or copy a word including the ending whitespace.
+        # move one line down to the start of the next line
P        # place text ahead of the cursor
^        # move to start of text
<Ctrl-A> # increment text
q        # Finish recording macro

Что это позволяетdo - это воспроизведение макроса в последней строке нумерованного списка столько раз, сколько необходимо.

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