Editor Vi替换命令

Editor Vi替换命令,editor,command,vi,substitution,Editor,Command,Vi,Substitution,使用vi,如何将当前行号替换到当前行的某个位置?例如,如果光标位于第10行,我想将数字10放在该行的某个位置。您想实际插入行号,而不仅仅将其显示在页边空白处吗?如果是的话- :s/$/\=line(".")/ 这将把它附加到行的末尾。将$替换为^作为行的前缀。首先:以下假设您使用的是vim,而不是vi或类似产品或传家宝项目vi 以下是几个选项: 首先,如果要使用:s,请将光标放在所选行上,然后: :s/texttoreplace/<C-R>=line(".")<CR>/

使用vi,如何将当前行号替换到当前行的某个位置?例如,如果光标位于第10行,我想将数字10放在该行的某个位置。

您想实际插入行号,而不仅仅将其显示在页边空白处吗?如果是的话-

:s/$/\=line(".")/

这将把它附加到行的末尾。将$替换为^作为行的前缀。

首先:以下假设您使用的是vim,而不是vi或类似产品或传家宝项目vi

以下是几个选项:

首先,如果要使用
:s
,请将光标放在所选行上,然后:

:s/texttoreplace/<C-R>=line(".")<CR>/
然后按回车键,如
所示。此时,您将回到您的
:s
插入行号的命令。您可以在插入模式下执行相同的操作 同样(
=行(“.”

其次,可以使用
\=
在 同样的方法,但这在插入模式或其他地方不起作用

最后,如果希望在“插入”和“命令行”模式下使用Ctrl-A插入当前行号,则这些选项非常有用:

:imap <silent> <C-A> <C-R>=line(".")<CR>
:cmap <C-A> <C-R>=line(".")<CR>
:imap=行(“.”)
:cmap=行(“.”)
不要将silent属性添加到
cmap
行中:它禁止将该行输出到您正在键入的命令中,直到您退格。

我尝试过了

:s/texttoreplace/<C-R>=line(".")<CR>/
g/^/exec
在与regex
/^/
匹配的每一行(即每一行)上执行给定命令。然后,表达式
line(“.”
在正在处理的行的范围内求值,而不是在键入命令时在范围内求值

:s/texttoreplace/<C-R>=line(".")<CR>/
g/^/exec "s/texttoreplace/(".line(".")."/"