在研究VIM函数以学习编写自己的函数时,我发现命令有时是用preceded with the keyword normal编写的
normal mz有时使用normal wrapped in an exec
exec "normal mk"或者有时是alone on the line;
0d在优秀的手册中,这个问题被解决了吗?
发布于 2012-03-16 01:14:51
你会对不同的模式感到困惑。更具体地说,是命令模式和正常模式。
命令模式是应用ex命令的地方,即以冒号开头的命令。VimScript文件只是一系列的ex命令。
当您需要在ex模式(命令模式)下执行正常模式命令时,可以使用:normal ex命令,该命令会像在正常模式下一样执行参数。
当你直接执行命令的时候,你就是在直接执行它。在您的示例中,:d命令与范围一起使用。这与正常模式下的d键不同,这是另一个完全不同的命令。查看:d和d (常规命令)的帮助。
:execute对于将命令构建为字符串并将其作为ex命令执行非常有用。在您的示例中,它是无用的。但在其他情况下,它变得很方便,例如,当您有一个保存行号的变量并希望在命令中使用它的值时:
:let i=4
:exec "2," . i . "d"它就像
:2,4d发布于 2012-03-16 01:05:00
让我们来看看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脚本中键入控制字符:
:执行"normal ixxx\“
这具有<Esc>字符,请参见|expr-string|。
对于0d,可以为一些Ex (命令行)命令指定要执行的行号范围。0通常被解释为1,因为Vim行号从1开始,而不是从0开始,所以:0d (和:1d)只是删除第一行。:2,4d将删除第二、第三和第四行。有关更多详细信息,请参阅:h cmdline-ranges。
https://stackoverflow.com/questions/9724123
复制相似问题