execute命令是用来把一个字符串当作vimscript来进行执行的。运行下面的命令:
:execute "echom 'Hello, world!'"
Vim会把echom 'hello, world!'作为命令进行执行,即是输出字符串并且打下消息日志。Execute命令的功能非常强大,因为你可以把任意字符串当作命令来执行。
我们来看看一个更加有用的例子。首先在vim里打开一个文件,然后用:edit "foo.txt",在当前窗口打开另外一个缓冲区。现在运行下面的命令:
:execute "rightbelow vsplit " . bufname("#")
vim会在第二个文件的右边分出一个窗口,并在里面打开第一个文件。究竟是发生了什么呢?
首先,vim会把“rightbelow vsplit”和bufname("#")的执行结果连接起来组成一个命令。
后面我们会讨论bufname这个函数的,现在只要知道它会返回之前一个文件的路径就可以了。如果你想验证的话,你可以用echom来打印出它的执行结果。
一旦bufname函数被执行了,vim就会把把它的结果和前面的字符串拼接成一个类似于“rightbelow vsplit bar.txt”的字符串。然后execute会执行这个vimscript命令,从而就会在一个窗口里打开这个文件。
在大部分的编程语言里,用这种“eval”结构来直接执行命令的语是不推荐使用的。但是,在vimscript里确不是这样。主要有以下两个原因。
首先,vim只会从一个人那里得到指令:也就是用户。如果用户想用execute命令来搞破坏的话,那就随他的便了,那是他自己的电脑。
和其他的时常会从不可信的用户那里取得输入的编程语言相比,vim的环境比较特殊,一些基本的安全问题都不很常见。
第二个原因是vimscript有些时候要用一些晦涩带技巧性的语法,execute经常是最简单,最直接的可以完成任务的方式。在其他编程语言里“eval”结构并不会省下多少编码,但是在Vimscript里可以很方便的把多行命令写在一行里。