Макрос для создания нумерованных списков в vim?
Часто кажется, что у меня есть список предметов, и мне нужно добавить числа перед ними. Например:
Item one
Item two
Item three
Что должно быть:
1. Item one
2. Item two
3. Item three
В vim я могу нажать I
в режиме редактирования, вставить "1.", нажать escape. Затем перейдите к следующей строке, нажмите .
, а затем ^A
, чтобы увеличить число. Это кажется чрезвычайно неэффективным... как я могу сделать макрос, чтобы я мог перейти к следующей строке и вставить число в начале, которое больше, чем строка раньше?
Ответы
Ответ 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).'. '
Ответ 3
Есть также некоторые плагины для выполнения этого типа работы, если вам приходится делать это иногда:
http://vim.sourceforge.net/scripts/script.php?script_id=670
Ответ 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
Что вы можете сделать, так это повторить макрос в последней строке нумерованного списка столько раз, сколько необходимо.