vim中的变量搜索和替换

时间:2015-09-17 12:34:35

标签: vim

我有一个要添加方法调用的项目列表。一个例子是最简单的。这就是我现在所拥有的:

 assists: 12,
 level: 14,
 deaths: 5,
 ...

我想将该列表更改为:

 assists: build_average(:assists),
 level: build_average(:level),
 deaths: build_average(:deaths),
 ...

是否可以将该方法调用添加到每一行的末尾,并将键的名称作为具有整齐Vim表达式的参数?

3 个答案:

答案 0 :(得分:5)

更多正则表达式:

:%s/\(\w\+\):.\+/\1: build_average(:\1),/

请注意,这适用于文件中的所有行。要仅替换某个地区,请选择该地区(使用V),然后使用:s(结果为:<,>s/...)。

在VIM中使用更复杂的正则表达式可能很棘手,因为元字符与“普通”正则表达式语法不同(您需要编写\+而不是+,但可以使用.例如,没有逃避它。我发现本指南非常方便引用正则表达式的特殊VIM语法:http://vimregex.com/#pattern

答案 1 :(得分:4)

或者你可以录制一个宏:

q                   // record macro
q                   // assign it to letter 'q'
0                   // go to start of line
/:<ENTER>           // search for ':'
l                   // move cursor 1 position to the right
d$                  // delete to end of line (line is now 'assists:')
yyp                 // duplicate current line (cursor moves 1 line down)
k                   // move cursor up
A build_average(    // append " build_average("
<ESC>               // exit edit mode
J                   // join next line
A ),                // append " ),"
<ESC>               // exit edit mode
j                   // move 1 line down
q                   // stop recording macro
2@q                 // execute macro 'q' 2 times

答案 2 :(得分:2)

更多正则表演体操:

:%s/\v(\w+):\s+\zs.*\ze,/build_average(:\1)/

解密它:

  • :help \v
  • :help \w
  • :help \s
  • :help \zs
  • :help \ze
  • :help \1