我想在Vim中每行末尾添加*
。
我尝试了这段代码但未成功
:%s/\n/*\n/g
:%norm A*
这是它的意思:
% = for every line
norm = type the following commands
A* = append '*' to the end of current line
I*
而不是 0i*
可以省下一个按键。 - Jedidiah Hurt:
,这将预填充命令为 :'<,'>
,然后您可以将其变为 :'<,'>norm A*
。 - Jedidiah HurtI
,替换命令为: :%norm I*
。 - Just Lucky Really:%s/$/\*/g
应该可以工作,:%s/$/*/g
也应该可以。
g
标记是不必要的。 - doubleDown我认为使用可视块模式是处理这种情况的更好、更多才多艺的方法。以下是一个例子:
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
直到达到最后一行并不实际。 - nash另外:
:g/$/norm A*
还有:
gg<Ctrl-v>G$A*<Esc>
g
是 global
命令,它会对每个匹配的行执行某些操作。 $
匹配每一行。它也可以是 ^
或 .*
。norm 执行你通常在命令模式下使用的命令。因此,A*
表示将 *
添加到行末。 - defhlt如果您想在每行末尾添加“Hello world”:
:%s/$/HelloWorld/
如果你想对特定行数进行操作,比如从第20行到第30行,请使用:
:20,30s/$/HelloWorld/
如果您想在每行开头执行此操作,则使用:
:20,30s/^/HelloWorld/
您实际上不需要末尾的g
。因此它变成:
:%s/$/*
或者如果你只想在第14-18行末尾添加*
:
:14,18s/$/*
或者
:14,18norm A*
...并在每行开头添加*号(即在开头添加)。
%s/^/*/g
:%s/\n/*\r/g
%s/\s*$/\*/g
这将解决问题,并确保忽略前导空格。
s///
右侧,\n
对应着一个空字符。相关信息请参见:help sub-replace-special
。 - doubleDown