Vim 保存搜索结果以供以后的操作使用
我有一些如下的日志文件:Vim 保存搜索结果以供以后的操作使用,vim,Vim,我有一些如下的日志文件: Foo number: 5551234 Opening file 5551234 Something else with 5551234 in it 1234567 is an entirely different number. :%s//FOO_NUMBER/ let pattern = '^Foo number: *\zs\d\+' if search(pattern) > 0 let number = matchstr(getline('.')
Foo number: 5551234
Opening file 5551234
Something else with 5551234 in it
1234567 is an entirely different number.
:%s//FOO_NUMBER/
let pattern = '^Foo number: *\zs\d\+'
if search(pattern) > 0
let number = matchstr(getline('.'), pattern)
execute '%s/' . number. '/FOO_NUMBER/'
endif
其中“Foo编号”每次都不同。它可以出现在任意数量的行中,但始终以初始“Foo number:#”行作为其第一个外观
我想用占位符文本“FOO_number”替换此编号的所有实例,以便区分日志
我已经能够使用这个正则表达式匹配数字:
/\(Foo number: \)\@<=\(\d*\)
我想用占位符替换此数字的所有实例
文本“FOO_编号”
这将有助于:
Foo number: 5551234 -> Foo number: FOO_NUMBER
更新
现在我知道您要做什么了,首先要获取数字,然后用占位符替换缓冲区中的所有数字实例
Ingo提供了一个脚本,您也可以使用宏:
首先搜索:/^Foo编号:*\zs\d*
然后按:
*qqcwFOO_NUMBER<ESC>n@qq
我想用占位符替换此数字的所有实例
文本“FOO_编号”
这将有助于:
Foo number: 5551234 -> Foo number: FOO_NUMBER
更新
现在我知道您要做什么了,首先要获取数字,然后用占位符替换缓冲区中的所有数字实例
Ingo提供了一个脚本,您也可以使用宏:
首先搜索:/^Foo编号:*\zs\d*
然后按:
*qqcwFOO_NUMBER<ESC>n@qq
有不同的方法来获取号码。如果以交互方式执行此操作,我会搜索事件:
/^Foo number: *\zs\d\+
然后猛拉(使用yiw
,y$
,…),并将其放入搜索寄存器:
:let @/ = @@
然后,由于:substitute
命令默认为上次使用的搜索(register),因此可以按如下方式进行替换:
Foo number: 5551234
Opening file 5551234
Something else with 5551234 in it
1234567 is an entirely different number.
:%s//FOO_NUMBER/
let pattern = '^Foo number: *\zs\d\+'
if search(pattern) > 0
let number = matchstr(getline('.'), pattern)
execute '%s/' . number. '/FOO_NUMBER/'
endif
如果我编写一个映射/命令,我会像这样获取数字:
Foo number: 5551234
Opening file 5551234
Something else with 5551234 in it
1234567 is an entirely different number.
:%s//FOO_NUMBER/
let pattern = '^Foo number: *\zs\d\+'
if search(pattern) > 0
let number = matchstr(getline('.'), pattern)
execute '%s/' . number. '/FOO_NUMBER/'
endif
有不同的方法来获取号码。如果以交互方式执行此操作,我会搜索事件:
/^Foo number: *\zs\d\+
然后猛拉(使用yiw
,y$
,…),并将其放入搜索寄存器:
:let @/ = @@
然后,由于:substitute
命令默认为上次使用的搜索(register),因此可以按如下方式进行替换:
Foo number: 5551234
Opening file 5551234
Something else with 5551234 in it
1234567 is an entirely different number.
:%s//FOO_NUMBER/
let pattern = '^Foo number: *\zs\d\+'
if search(pattern) > 0
let number = matchstr(getline('.'), pattern)
execute '%s/' . number. '/FOO_NUMBER/'
endif
如果我编写一个映射/命令,我会像这样获取数字:
Foo number: 5551234
Opening file 5551234
Something else with 5551234 in it
1234567 is an entirely different number.
:%s//FOO_NUMBER/
let pattern = '^Foo number: *\zs\d\+'
if search(pattern) > 0
let number = matchstr(getline('.'), pattern)
execute '%s/' . number. '/FOO_NUMBER/'
endif
谢谢,但这只会取代第一次出现的数字。我想用第一行来确定数字是什么,然后替换整个文件中出现的所有数字。@JohnSprad刚才我误解了您的要求,请参阅答案中的更新。谢谢,但这只替换了数字的第一次出现。我想用第一行来确定数字,然后替换整个文件中出现的所有内容。@JohnSprad刚才我误解了您的要求,请参阅更新答案。