在研究VIM函数以学习编写自己的函数时,我发现命令有时会先normal写入关键字:
normal mz
Run Code Online (Sandbox Code Playgroud)
有时normal 包裹在exec:
exec "normal mk"
Run Code Online (Sandbox Code Playgroud)
或者有时单独上线 ;
0d
Run Code Online (Sandbox Code Playgroud)
在精细手册中的哪个地址?
sid*_*yll 24
你对各种模式感到困惑.更具体地说,命令模式和正常模式.
命令模式是应用ex命令的位置,以冒号开头的命令.VimScript文件只是一系列ex命令.
当您在ex模式(命令模式)下需要执行普通模式命令时,可以使用 :normalex命令,该命令执行正常模式下的参数.
当你直接执行命令时,你正在直接执行它.在您的示例中,该:d 命令与范围一起使用.这与d正常模式下的
键不同,这是另一个完全不同的命令.检查帮助:d和d(正常命令).
将:execute命令构建为字符串并将其作为ex命令执行非常有用.在你的例子中,它没用.但是在其他情况下它会变得很方便,例如当你有一个变量持有行号并希望在命令中使用它的值时:
:let i=4
:exec "2," . i . "d"
Run Code Online (Sandbox Code Playgroud)
这是一样的
:2,4d
Run Code Online (Sandbox Code Playgroud)
好吧,让我们问一下Vim广泛的内置帮助系统,您可以通过键入:h后跟您感兴趣的命令或关键字来访问它:
:h norm
:norm[al][!] {commands}执行正常模式命令
{commands}.这使得可以执行在命令行上键入的正常模式命令....
换句话说,normal mz在脚本中等同于mz在普通模式下键入.
:h exec
:exe[cute] {expr1} ..执行
{expr1}作为Ex命令评估得到的字符串....
我不清楚为什么链接脚本的作者使用exec "normal mk"而不是normal mk(mk在正常模式下只设置一个名为"k"的标记).但是文档确实提供了这个:
:execute也是避免在:normal命令的Vim脚本中键入控制字符的好方法:Run Code Online (Sandbox Code Playgroud):execute "normal ixxx\<Esc>"这有一个
<Esc>角色,请参阅|expr-string|.
至于0d一些Ex(命令行)命令可以给出一系列行号来执行.0通常被解释为1,因为Vim行编号从1开始,而不是0,所以:0d(和:1d)只是删除第一行.:2,4d会删除第二行,第三行和第四行.有关:h cmdline-ranges详细信息,请参阅