【发布时间】:2009-02-23 20:04:28
【问题描述】:
使用 vi,如何将当前行号替换为当前行?例如,如果光标在第 10 行,我想将数字 10 放在该行的某处。
【问题讨论】:
标签: editor command vi substitution
使用 vi,如何将当前行号替换为当前行?例如,如果光标在第 10 行,我想将数字 10 放在该行的某处。
【问题讨论】:
标签: editor command vi substitution
您想实际插入行号,而不仅仅是在页边空白处显示?如果是这样-
:s/$/\=line(".")/
这会将它附加到行尾。将 $ 替换为 ^ 以添加到该行的前面。
【讨论】:
首先:以下假设您使用的是 vim,而不是 vi 或类似的工作或 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>
不要将静默属性添加到cmap 行:它会禁止将该行输出到您正在输入的命令中,直到您退格为止。
【讨论】:
我试过了
:s/texttoreplace/<C-R>=line(".")<CR>/
但这将文本替换为我在每一行上发出命令 (1) 时所在的行号,而不是为每一行使用不同的数字。
以下内容对我有用。
g/^/exec "s/texttoreplace/(".line(".")."/"
g/^/exec 在与正则表达式 /^/ 匹配的每一行(即每一行)上执行给定的命令。表达式line(".") 然后在正在处理的行的范围内进行评估,而不是在键入命令时在范围内的行。
【讨论】: