使用 vi,如何将当前行号替换为当前行?例如,如果光标在第 10 行,我想将数字 10 放在该行的某处。
David Hayek
问问题
892 次
3 回答
6
您想实际插入行号,而不仅仅是在边距中显示它?如果是这样 -
:s/$/\=line(".")/
这会将其附加到行尾。将 $ 替换为 ^ 以添加到该行的前面。
于 2009-02-23T20:13:10.833 回答
4
首先:以下假设您使用的是 vim,而不是 vi 或类似的工作或 Heirloom 项目 vi。
这里有几个选项:
首先,如果您要使用:s
,则将光标放在您选择的行上,然后:
:s/texttoreplace/<C-R>=line(".")<CR>/
where<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>
不要将静默属性添加到该cmap
行:它会禁止将该行输出到您正在键入的命令中,直到您退格为止。
于 2009-02-23T20:14:54.027 回答
1
我试过了
:s/texttoreplace/<C-R>=line(".")<CR>/
但这将文本替换为我在每一行上发出命令 (1) 时所在的行号,而不是为每一行使用不同的数字。
以下对我有用。
g/^/exec "s/texttoreplace/(".line(".")."/"
在匹配正则表达式的每一行(即每一行)g/^/exec
上执行给定的命令。/^/
然后在正在处理的行的范围内评估表达式line(".")
,而不是在键入命令时在范围内的行。
于 2011-06-01T10:07:36.733 回答