Vimscript编程指南

execute命令

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命令,从而就会在一个窗口里打开这个文件。

execute危险吗?

在大部分的编程语言里,用这种“eval”结构来直接执行命令的语是不推荐使用的。但是,在vimscript里确不是这样。主要有以下两个原因。

首先,vim只会从一个人那里得到指令:也就是用户。如果用户想用execute命令来搞破坏的话,那就随他的便了,那是他自己的电脑。

和其他的时常会从不可信的用户那里取得输入的编程语言相比,vim的环境比较特殊,一些基本的安全问题都不很常见。

第二个原因是vimscript有些时候要用一些晦涩带技巧性的语法,execute经常是最简单,最直接的可以完成任务的方式。在其他编程语言里“eval”结构并不会省下多少编码,但是在Vimscript里可以很方便的把多行命令写在一行里。

练习

  • 浏览:help execute 看看哪些事情可以用execute来做,哪些又是不能的。不要陷入的太深,我们后面会继续讨论它的。
  • 阅读:help leftabove,:help rightbelow,:help :split,和:help :vsplit(注意后面两个命令里的分号)
  • 在你的vimrc文件里添加一个映射用来在你选择的位置(水平/竖直,上/下/左/右)打开之前的文件。