execute命令

execute 命令用来执行一个字符串,把它当做一个 Vimscript 命令。 我们在之前的章节里面看过,但既然我们已经了解了更多关于 Vimscript 字符串的知识,那我们就再进一步看看。

基本execute命令

运行以下命令:

:execute "echom 'Hello, world!'"

Vim 执行 echom 'Hello, world!' 命令,并且尽责地回显到屏幕和消息日志中。 execute命令是个非常强大的工具,因为它能让你用任意字符串构建命令。

让我们试试一个更有用的例子。准备一个文件,在 Vim 中打开,然后在相同的窗口中用 :edit foo.txt 打开一个新的缓冲。现在运行以下命令:

:execute "rightbelow vsplit " . bufname("#")

Vim 会在第二个文件右边的分割窗口中打开第一个文件。这儿发生了什么?

首先,Vim 把 "rightbelow vsplit " 和调用 bufname("#") 的结果连接起来构建命令。

我们稍后再来看看这个函数,但现在只要相信它会返回前一个缓冲的路径。 如果你想亲自看看,那就用 echom 试试。

一旦计算出 bufname 结果,Vim 就会生成字符串 "rightbelow vsplit bar.txt"execute 命令执行这个 Vimscript 命令,在分割窗口中打开文件。

execute命令危险吗?

在大部分编程语言中,使用这样的 "eval" 结构来把字符串作为程序代码是不被推荐的(是放在很次要的位置的)。 Vimscript 的 execute 命令并没有这个弊端,有两个原因。

首先,大部分 Vimscript 代码只会从一个人,那就是用户那里获得输入。 如果用户想输入一个诡异的字符串,那会导致 execute 命令做一些糟糕的事情,那随便吧,这是他自己的电脑! 和其他语言相比,那些程序会经常从不可信的用户那里接受输入。 Vim 是个特殊的环境,一些基本的安全问题并不常见。

第二个原因是因为 Vimscript 有时要用到神秘、诡异的语法,execute 常常是最简单、最直接的实现方法。 在其他大部分的语言中,用"eval"结构通常不太会节省你的键入,但在 Vimscript 中,它可以把多行折叠为一行。

练习

略读 :help execute 来获得一个基本概念,知道哪些可以用 execute 、哪些不可以。 但是不用研究的太深——我们马上还会见到它。

阅读 :help leftabove:help rightbelow:help :split,和 :help :vsplit (注意后面两个主题中额外的冒号)。

~/.vimrc 文件中添加一个映射,使其可以在你选择的(垂直/水平,上/下/左/右)分割窗口中打开前一个缓冲。

原文地址:http://learnvimscriptthehardway.stevelosh.com/chapters/28.html