Подтвердить что ты не робот

Макрос для создания нумерованных списков в vim?

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

Item one
Item two
Item three

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

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

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

4b9b3361

Ответ 1

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

Сначала вставьте 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 (в первый раз, для последующих времен вы можете сделать @@, чтобы повторить последний выполненный макрос), и он добавит новый увеличенный номер в начало каждого линия.

Ответ 2

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

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

Это легко добавить в команду:

command! -nargs=0 -range=% Number <line1>,<line2>s/^\s*\zs/\=(line('.') - <line1>+1).'. '

Ответ 4

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

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

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

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

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

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

Ответ 5

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

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

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

В Windows вы должны установить Cygwin/MSYS/SUA.

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

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

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

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

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

Ответ 6

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

1. Item One

Введите команду обычного режима vim следующим образом:

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

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