使用vi,如何将当前行号替换为当前行?例如,如果光标位于第10行,我想将数字10放在该行的某个位置。
答案 0 :(得分:6)
您想要物理插入行号,而不只是在边距中显示它?如果是的话 -
:s/$/\=line(".")/
这会将它附加到该行的末尾。将$替换为^以前置到该行。
答案 1 :(得分:4)
首先:以下假设您使用的是vim,而不是vi或workalike或Heirloom项目vi。
以下是几个选项:
首先,如果您要使用:s
,请将光标放在您选择的行上,然后:
:s/texttoreplace/<C-R>=line(".")<CR>/
其中<C-R>=
表示实际按 Ctrl - R 然后键入等号。提示
会改变,你可以输入:
line(".")
然后点击返回,如<CR>
所示。此时您将回到:s
插入行号的命令。你可以在插入模式下做同样的技巧
(<C-R>=line(".")<CR>
)。
其次,您可以使用\=
在行中的正则表达式中插入行号
同样的方法,但这在插入模式或其他地方不起作用。
最后,如果你想在插入和命令行模式中插入 Ctrl - A 来插入当前行号,这些非常有用:
:imap <silent> <C-A> <C-R>=line(".")<CR>
:cmap <C-A> <C-R>=line(".")<CR>
不要将silent属性添加到cmap
行:它会禁止将行输出到您正在键入的命令中,直到退格为止。
答案 2 :(得分:1)
我试过
:s/texttoreplace/<C-R>=line(".")<CR>/
但是,当我在每一行上发出命令(1)时,用当前行的编号替换了文本,而不是为每一行使用不同的编号。
以下对我有用。
g/^/exec "s/texttoreplace/(".line(".")."/"
g/^/exec
在与正则表达式/^/
匹配的每一行(即每一行)上执行给定命令。然后在正在处理的行的范围内计算表达式line(".")
,而不是在键入命令时范围内的行。