我怎样才能添加一个string到Vim每行的结尾?

我想添加*到Vim每行的末尾。

我试了代码失败

 :%s/\n/*\n/g 

:%s/$/\*/g

应该pipe用。 所以应该:%s/$/*/g正如MrWiggles指出的那样:%s/$/*/g

甚至比search命令更短:

 :%norm A* 

这就是这个意思:

  % = for every line norm = type the following commands A* = append '*' to the end of current line 

也:

 :g/$/norm A* 

也:

 gg<Ctrl-v>G$A*<Esc> 

我认为使用视觉块模式是一种更好,更通用的方法来处理这种types的事情。 这是一个例子:

这是第一行。
这是第二个。
第三。

插入“Hello world”。 (空格+剪贴板)在每个这些行的结尾:

  • 在第一行中的一个字符上,按下Ctrl-V(或Ctrl-Q,如果Ctrl-V粘贴)。
  • 按jj将视觉区块延伸三行。
  • 按$将可视块扩展到每行的末尾。 按A然后按空格键入Hello world。 +然后Esc。

结果是:

这是第一行。 你好,世界。
这是第二个。 你好,世界。
第三。 你好,世界。

(来自http://vim.wikia.com/wiki/Inserting_text_in_multiple_lines的示例);

如果你想在每一行的末尾添加Hello World:

 :%s/$/HelloWorld/ 

如果你想为特定的行数做这个,从20到30使用:

 :20,30s/$/HelloWorld/ 

如果你想在每一行的开始执行此操作,请使用:

 :20,30s/^/HelloWorld/ 

…并在每个行的前面添加*(开头)

 %s/^/*/g 

你最终并不需要g 。 所以它变成:

 :%s/$/* 

或者,如果你只是想在14-18行的末尾加上*

 :14,18s/$/* 

要么

 :14,18norm A* 

一种select是:

:g/$/s//*

这将find每一行结束锚,并用*代替。 我说“替代”,但实际上这更像是一个附加词,因为这个锚是一个特殊的东西,而不是一个普通的字符。 有关更多信息,请参见g的权力 – 示例 。

  :%S / \ N / * \ R / G 

你的第一个在其他地方是正确的,但是由于某些原因,Vim必须有不同的换行符处理。

 %s/\s*$/\*/g 

这将做的伎俩,并确保领先的空间被忽略。