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

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

:g/searchString/ Ctrl-A

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

E492: Не команда редактора ^A

Какие-либо предложения?

18
задан Mateusz Piotrowski 28 July 2017 в 14:36
поделиться

3 ответа

Бесплатные звуковые эффекты - SFXsource.com

-121--2522087-
#!/usr/bin/ruby1.8

require 'nokogiri'
require 'pp'

html = <<-EOS
  (The HTML from the question goes here)
EOS

doc = Nokogiri::HTML(html)
rows = doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr')
details = rows.collect do |row|
  detail = {}
  [
    [:title, 'td[3]/div[1]/a/text()'],
    [:name, 'td[3]/div[2]/span/a/text()'],
    [:date, 'td[4]/text()'],
    [:time, 'td[4]/span/text()'],
    [:number, 'td[5]/a/text()'],
    [:views, 'td[6]/text()'],
  ].each do |name, xpath|
    detail[name] = row.at_xpath(xpath).to_s.strip
  end
  detail
end
pp details

# => [{:time=>"23:35",
# =>   :title=>"Vb4 Gold Released",
# =>   :number=>"24",
# =>   :date=>"06 Jan 2010",
# =>   :views=>"1,320",
# =>   :name=>"Paul M"}]
-121--1304081-

Необходимо использовать normal для выполнения команд normal метода в команде методов :

:g/searchString/ normal ^A

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

27
ответ дан 30 November 2019 в 07:18
поделиться

Я уверен, что вы можете сделать это с 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
0
ответ дан 30 November 2019 в 07:18
поделиться

Так же как и трюк :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
)
11
ответ дан 30 November 2019 в 07:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: