【发布时间】:2010-10-10 07:34:53
【问题描述】:
我想在 Vim 的每一行末尾添加*。
我试了代码不成功
:%s/\n/*\n/g
【问题讨论】:
-
你的不起作用,因为在
:s///的右侧,\n对应于一个空字符。:help sub-replace-special部分是相关的。
我想在 Vim 的每一行末尾添加*。
我试了代码不成功
:%s/\n/*\n/g
【问题讨论】:
:s/// 的右侧,\n 对应于一个空字符。 :help sub-replace-special 部分是相关的。
:%s/$/\*/g
应该有效,:%s/$/*/g 也应该有效。
【讨论】:
g标志是不必要的。
我认为使用视觉块模式是处理这类事情的更好、更通用的方法。这是一个例子:
This is the First line.
This is the second.
The third.
插入“Hello world”。 (空格 + 剪贴板) 在每一行的末尾:
结果是:
This is the First line. Hello world.
This is the second. Hello world.
The third. Hello world.
(来自Vim.Wikia.com的示例)
【讨论】:
G 移动到最后一行,而不是按jj。这在大文件中很有用,在这种情况下按j 直到你打到最后一行是不切实际的。
一个选项是:
:g/$/s//*
这将找到每个行尾锚点并将其替换为*。我说的是“替代”,但实际上,它更像是一个附加,因为锚是一个特殊的东西,而不是一个常规字符。如需更多信息,请参阅Power of g - Examples。
【讨论】:
如果你想在每一行的末尾添加 Hello world:
:%s/$/HelloWorld/
如果您想针对特定的行数执行此操作,例如从 20 到 30,请使用:
:20,30s/$/HelloWorld/
如果您想在每一行的开头执行此操作,请使用:
:20,30s/^/HelloWorld/
【讨论】:
最后你真的不需要g。于是就变成了:
:%s/$/*
或者,如果您只想在末尾添加 *,例如第 14-18 行:
:14,18s/$/*
或
:14,18norm A*
【讨论】:
%s/\s*$/\*/g
这样可以解决问题,并确保忽略前导空格。
【讨论】:
...并在每一行前面加上 *,
%s/^/*/g
【讨论】:
比 :search 命令还要短:
:%norm A*
这就是它的意思:
% = for every line
norm = type the following commands
A* = append '*' to the end of current line
【讨论】:
I* 而不是0i* 可以为您节省一次按键操作。
:,这将使用:'<,'> 预先填充命令,然后您可以将其转换为:'<,'>norm A*
I - :%norm I*
还有:
:g/$/norm A*
还有:
gg<Ctrl-v>G$A*<Esc>
【讨论】:
g 是global 命令,它对每个匹配的行执行一些操作。 $ 匹配每一行。也可以是^ 或.*。 norm 执行您通常在命令模式下使用的命令。所以A* 表示将* 附加到行尾。
:%s/\n/*\r/g
您的第一个在其他任何地方都是正确的,但由于某种原因,Vim 必须有不同的换行符处理。
【讨论】: