294

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

我尝试了代码不成功

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

10 回答 10

410

甚至比 :search 命令更短:

:%norm A*

这就是它的意思:

 %       = for every line
 norm    = type the following commands
 A*      = append '*' to the end of current line
于 2009-03-01T07:09:14.427 回答
399
:%s/$/\*/g

应该工作,所以应该:%s/$/*/g

于 2009-02-27T11:53:48.630 回答
59

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

This is the First line.  
This is the second.  
The third.

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

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

结果是:

This is the First line. Hello world.  
This is the second. Hello world.  
The third. Hello world.  

(来自Vim.Wikia.com的示例)

于 2013-08-08T18:44:25.813 回答
44

还:

:g/$/norm A*

还:

gg<Ctrl-v>G$A*<Esc>
于 2009-02-27T19:37:45.207 回答
18

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

:%s/$/HelloWorld/

如果您想针对特定的行数执行此操作,例如从 20 到 30,请使用:

:20,30s/$/HelloWorld/

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

:20,30s/^/HelloWorld/
于 2014-07-16T09:59:25.463 回答
9

一种选择是:

:g/$/s//*

这将找到每个行结束锚并将其替换为*. 我说的是“替代”,但实际上,它更像是一个附加,因为锚是一个特殊的东西,而不是一个常规字符。有关详细信息,请参阅g 的幂 - 示例

于 2009-02-27T12:41:36.393 回答
6

最后你真的不需要g。所以它变成:

:%s/$/*

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

:14,18s/$/*

或者

:14,18norm A*
于 2013-06-15T12:36:41.390 回答
5

...并在每一行前面加上 *,

%s/^/*/g
于 2012-01-18T17:28:44.660 回答
3
:%s/\n/*\r/g

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

于 2009-02-27T12:05:37.227 回答
2
%s/\s*$/\*/g

这将起到作用,并确保忽略前导空格。

于 2009-02-27T11:59:23.763 回答