В нормальном режиме (в Vim), если курсор находится на числе, совершая нападки Ctrl-A увеличивает число 1. Теперь я хочу сделать то же самое, но из командной строки. А именно, я хочу перейти к определенным строкам, первый символ которых является числом, и увеличьте его, т.е. я хочу выполнить следующую команду:
:g/searchString/ Ctrl-A
Я пытался сохранить Ctrl-A в макросе (сказать a
), и использование :g/searchString/ @a
, но я получаю ошибку:
E492: Не команда редактора ^A
Какие-либо предложения?
Бесплатные звуковые эффекты - 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
.
Я уверен, что вы можете сделать это с 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
Так же как и трюк :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
)