如何在Vim中每行的末尾添加一个字符串?

时间:2009-02-27 11:52:01

标签: regex vim replace match

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

我尝试了代码失败

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

9 个答案:

答案 0 :(得分:318)

:%s/$/\*/g

应该有效。因此,:%s/$/*/g MrWiggles应正确指出。

答案 1 :(得分:318)

甚至比:search命令还短:

:%norm A*

这就是它的含义:

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

答案 2 :(得分:39)

此外:

:g/$/norm A*

此外:

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

答案 3 :(得分:25)

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

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

插入“Hello world”。 (空格+剪贴板)在每一行的末尾:

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

结果是:

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

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

答案 4 :(得分:10)

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

:%s/$/HelloWorld/

如果你想对特定的行数说,从20到30,请使用:

:20,30s/$/HelloWorld/

如果您想在每行开头执行此操作,请使用:

:20,30s/^/HelloWorld/

答案 5 :(得分:5)

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

:%s/$/*

或者如果您只想在结尾处使用*,请说第14-18行:

:14,18s/$/*

:14,18norm A*

答案 6 :(得分:4)

一个选项是:

  

:g/$/s//*

这将找到每个行结束锚并用*替换它。我说“替代”,但事实上,它更像是一个追加,因为锚是一个特殊的东西,而不是一个普通的角色。有关详细信息,请参阅Power of g - Examples

答案 7 :(得分:3)

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

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

答案 8 :(得分:1)

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

这将解决问题,并确保忽略前导空格。