Использование Ctrl-A в командной строке Vim для увеличения числа - PullRequest
18 голосов
/ 14 января 2010

В обычном режиме (в Vim), если курсор находится на числе, нажатие Ctrl - A увеличивает число на 1. Теперь я хочу сделать то же самое, но из командной строки. В частности, я хочу перейти к определенным строкам, чьим первым символом является число, и увеличить его, т.е. я хочу выполнить следующую команду:

:g/searchString/ Ctrl-A

Я пытался сохранить Ctrl - A в макросе (скажем, a), используя :g/searchString/ @a, но получаю ошибку:

E492: Не является командой редактора ^ A

Есть предложения?

Ответы [ 3 ]

27 голосов
/ 14 января 2010

Вы должны использовать normal для выполнения нормальный режим команд в командный режим :

:g/searchString/ normal ^A

Обратите внимание, что вам нужно нажать Ctrl - V Ctrl - A , чтобы получить символ ^A.

11 голосов
/ 14 января 2010

Как и трюк :g//normal, опубликованный CMS, если вам нужно сделать это с более сложным поиском, чем просто найти число в начале строки, вы можете сделать что-то вроде этого:

:%s/^prefix pattern\zs\d\+\zepostfix pattern/\=(submatch(0)+1)

Для пояснения:

:%s/X/Y            " Replace X with Y on all lines in a file
" Where X is a regexp:
^                  " Start of line (optional)
prefix pattern     " Exactly what it says: find this before the number
\zs                " Make the match start here
\d\+               " One or more digits
\ze                " Make the match end here
postfix pattern    " Something to check for after the number (optional)

" Y is:
\=                 " Make the output the result of the following expression
(
    submatch(0)    " The complete match (which, because of \zs and \ze, is whatever was matched by \d\+)
    + 1            " Add one to the existing number
)
0 голосов
/ 14 января 2010

Я уверен, что вы можете сделать это с помощью vim в командной строке. Но вот альтернатива,

$ cat file
one
2two
three

$ awk '/two/{x=substr($0,1,1);x++;$0=x substr($0,2)}1' file #search for "two" and increment
one
3two
three
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...