到目前为止,脚本内的语句都是由 Vim 直接运行的。用 ":
execute" 命令可以执行一个
表达式的结果。这是一个创建并执行命令的非常有效的方法。
例如要跳转到一个由变量表示的标签:
"." 被用来连接字符串 "tag " 和变量 "tag_name" 的值。假设 "tag_name" 的值为
"get_cmd",那么被将执行的命令将是:
": execute" 命令只能用来执行冒号命令。":normal" 命令可以用来执行普通模式命令。
然而,它的参数只能是按表面意义解释的命令字符,不能是表达式。例如:
这个命令将跳转到第一行并以 "=" 操作符排版所有行。
为了使 ":normal" 命令也可以带表达式,可以把 ": execute" 与其连起来使用。
例:
变量 "normal_commands" 必须包含要执行的普通模式命令。
必须确保 ":normal" 的参数是一个完整的命令。否则,Vim 碰到参数的结尾就会中止
其运行。例如,如果你开始了插入模式,你必须也退出插入模式。这样没问题:
这将在当前行插入 "new text "。
的脚本当中键入真正的
如果你不想执行字符串,而想执行它作为表达式计算的结果,可以用 eval() 函数:
"&" 被加到 "path" 前面,这样传给 eval() 的参数成为 "&path"。这时得到的返回值就
是 'path' 选项的值。
相同的操作可以这样完成:
表达式的结果。这是一个创建并执行命令的非常有效的方法。
例如要跳转到一个由变量表示的标签:
:execute "tag " . tag_name
"." 被用来连接字符串 "tag " 和变量 "tag_name" 的值。假设 "tag_name" 的值为
"get_cmd",那么被将执行的命令将是:
:tag get_cmd
": execute" 命令只能用来执行冒号命令。":normal" 命令可以用来执行普通模式命令。
然而,它的参数只能是按表面意义解释的命令字符,不能是表达式。例如:
:normal gg=G
这个命令将跳转到第一行并以 "=" 操作符排版所有行。
为了使 ":normal" 命令也可以带表达式,可以把 ": execute" 与其连起来使用。
例:
:execute "normal " . normal_commands
变量 "normal_commands" 必须包含要执行的普通模式命令。
必须确保 ":normal" 的参数是一个完整的命令。否则,Vim 碰到参数的结尾就会中止
其运行。例如,如果你开始了插入模式,你必须也退出插入模式。这样没问题:
:execute "normal Inew text \<Esc>
"
这将在当前行插入 "new text "。
注意
这里使用了特殊键 "\
<Esc>
"。这样就避免了在你
的脚本当中键入真正的
<Esc>
字符。
如果你不想执行字符串,而想执行它作为表达式计算的结果,可以用 eval() 函数:
:let optname = "path"
:let optval = eval('&' . optname)
"&" 被加到 "path" 前面,这样传给 eval() 的参数成为 "&path"。这时得到的返回值就
是 'path' 选项的值。
相同的操作可以这样完成:
:exe 'let optval = &' . optname