使用vi编辑器,如何将当前行号替换到当前行的某个位置?例如,如果光标在第10行,我想在该行的某个位置放置数字10。
使用vi编辑器,如何将当前行号替换到当前行的某个位置?例如,如果光标在第10行,我想在该行的某个位置放置数字10。
:s/$/\=line(".")/
这将把它添加到行的末尾。将$替换为^以在行前添加。
首先,以下内容假设您正在使用vim,而不是vi或类似vi的软件或Heirloom项目vi。
这里有几个选项:
首先,如果您要使用:s
命令,请将光标放在您选择的行上,并执行以下操作:
:s/texttoreplace/<C-R>=line(".")<CR>/
其中<C-R>=
表示实际按下Ctrl-R,然后输入一个等号。提示符会改变,然后您可以输入:
line(".")
<CR>
所示。此时您将回到:s
命令并插入行号。您也可以在插入模式下使用相同的技巧(<C-R>=line(".")<CR>
)。\=
以相同的方式在正则表达式中插入行号,但这在插入模式或其他地方不起作用。:imap <silent> <C-A> <C-R>=line(".")<CR>
:cmap <C-A> <C-R>=line(".")<CR>
我尝试过
:s/texttoreplace/<C-R>=line(".")<CR>/
但是这个命令将每一行的文本替换为我发出命令时所在行的行号(1),而不是为每一行使用不同的行号。
以下方法适用于我。
g/^/exec "s/texttoreplace/(".line(".")."/"
g/^/exec
命令会在每一行匹配正则表达式 /^/
(即每一行)时执行给定的命令。然后,在处理该行时,表达式 line(".")
会在该行的作用域中进行评估,而不是在输入命令时的作用域中进行评估。