Function VIM功能:何时使用;“正常”;,何时使用;执行官;什么时候不用?

Function VIM功能:何时使用;“正常”;,何时使用;执行官;什么时候不用?,function,vim,Function,Vim,在学习编写自己的VIM函数时,我发现有时会编写命令: 有时使用正常: 或者有时 这在fine手册中的什么地方有说明?好吧,让我们询问Vim的广泛内置帮助系统,您可以通过键入:h然后键入您感兴趣的命令或关键字来访问该系统: :h标准 :norm[al][!]{commands} 执行正常模式命令{commands}。这样就可以执行在命令行上键入的正常模式命令 换句话说,脚本中的normal mz相当于在normal模式下键入mz :h exec :exe[cute]{expr1}.. 将计算{ex

在学习编写自己的VIM函数时,我发现有时会编写命令:

有时使用
正常

或者有时


这在fine手册中的什么地方有说明?

好吧,让我们询问Vim的广泛内置帮助系统,您可以通过键入
:h
然后键入您感兴趣的命令或关键字来访问该系统:

:h标准
:norm[al][!]{commands}

执行正常模式命令
{commands}
。这样就可以执行在命令行上键入的正常模式命令

换句话说,脚本中的
normal mz
相当于在normal模式下键入
mz

:h exec
:exe[cute]{expr1}..

将计算
{expr1}
所得的字符串作为Ex命令执行

我不清楚为什么链接脚本的作者使用
exec“normal mk”
而不是
normal mk
mk
在正常模式下只设置了一个名为“k”的标记)。不过,这些文件确实提供了这一点:

:execute
也是避免在Vim脚本中为
:normal
命令键入控制字符的好方法:

:execute "normal ixxx\<Esc>"
:执行“普通ixxx”
这有一个
字符,请参见
|expr string |


对于
0d
,一些Ex(命令行)命令可以指定一系列行号来执行<代码>0通常被解释为
1
,因为Vim行编号从1开始,而不是从0开始,所以
:0d
(和
:1d
)只删除第一行<代码>:2,4d将删除第二行、第三行和第四行。有关更多详细信息,请参见
:h cmdline范围。

您对各种模式感到困惑。更具体地说,命令 模式和正常模式

命令模式是应用ex命令的地方,即开始的命令 用冒号。VimScript文件只是一系列ex命令

在ex模式(命令模式)下需要执行正常模式命令时 您可以使用
:normal
ex命令,该命令将按原样执行参数 处于正常模式

当您直接执行命令时,您就是在直接执行它。在你的 例如,
:d
命令用于范围。这和以前的不一样
d
在正常模式下按键,这是另一个完全不同的命令。检查 有关
:d
d
(正常命令)的帮助

:execute
有助于将命令构建为字符串并作为 前指挥官。在你的例子中,它是无用的。但它在其他领域变得很方便 例如,当您有一个包含行号的变量 要在命令中使用其值,请执行以下操作:

:let i=4
:exec "2," . i . "d"
这和

:2,4d

谢谢,
exec
现在已清除。我也非常感谢对手册的参考,我将花一些时间阅读相关章节。函数调用后似乎会执行。我明白了,谢谢。我不知道命令模式和正常模式之间的区别。使用
的搜索是正常模式还是命令模式?两个似乎都不适合我@dotancohen实际上,命令模式的完整定义包括ex命令(:)、搜索命令(/和?)和筛选命令(!)。到底是什么不起作用-PYou可能喜欢阅读Steve Losh书中的第28、29和30章:@sidyll在命令模式下没有单独的搜索。有一些看起来像“空命令”:“转到范围内的最后一行”。您所引用的搜索是范围的一部分,但正在执行
:1
:'
:execute "normal ixxx\<Esc>"
:let i=4
:exec "2," . i . "d"
:2,4d