1

В Vim у меня есть следующий текст:


Door

Chair

Table

Uganda

И я хочу добавить пронумерованный текст в каждую нечетную строку, которая должна дать это:

>item1
Door
>item2
Chair
>item3
Table
>item4
Uganda

Возможно ли это в vim?

2 ответа2

4

Вы можете попробовать эту команду, которая, как бы не интуитивно это ни звучало, увеличивает i при каждом совпадении:

:let i = 1 | g/^$/execute "normal i>item" . i | let i = i + 1
1

Вот vimscript для этого:

:for s:i in range(1, line("$") / 2)
:  execute "normal " . eval(s:i * 2 - 1) . "gg"
:  execute "normal a" . ">item" . s:i
:endfor
  • Зациклите более половины строк в файле (поскольку нам нужны только нечетные).
  • Перейдите к соответствующему номеру строки (номер элемента * 2 - 1 даст следующую нечетную строку) с помощью gg .
  • Добавить >itemX в строку, где X - номер элемента.

Вы можете либо ввести это непосредственно в командной строке vim, либо поместить его в файл, а затем выполнить его, используя :source <filename> .

В качестве альтернативы вы можете добавить это как функцию к вашему .vimrc, а затем выполнить его с помощью :call <funcname()> .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .