`execute`命令用來把一個字符串當作Vimscript命令執行。在前面的章節我們曾經跟它打過交道, 不過隨著對Vimscript中的字符串有更深入的了解,現在我們將再次認識它。
## `execute`基本用法
執行下面的命令:
~~~
:execute "echom 'Hello, world!'"
~~~
Vim把`echom 'Hello, world!'`當作一個命令,而且盡職地在把它輸出的同時將消息記錄下來。 Execute是一個非常強大的工具,因為它允許你用任意字符串來創造命令。
讓我們試試一個更實用的例子。先在Vim里打開一個文件作為準備工作,接著使用`:edit foo.txt`在同一個窗口創建新的緩沖區。 現在執行下面的命令:
~~~
:execute "rightbelow vsplit " . bufname("#")
~~~
Vim將在第二個文件的右邊打開第一個文件的豎直分割窗口(vertical split)。為什么會這樣?
首先,Vim將`"rightbelow vsplit"`和`bufname('#')`調用的結果連接在一起,創建一個字符串作為命令。
我們過一段時間才會講到相應的函數,現在姑且認為它返回前一個緩沖區的路徑名。 你可以用`echom`來確認這一點。
待`bufname`執行完畢,Vim將結果連接成`"rightbelow vsplit bar.txt"`。?`execute`命令將此作為Vimscript命令執行,在新的分割里打開該文件。
## Execute危險嗎?
在大多數編程語言中使用諸如"eval"來構造可執行的字符串是會受到譴責的(如果不會是更嚴重的后果)。 因為兩個原因,Vimscript中的`execute`命令能免于操這份心。
首先,大多數Vimscript代碼僅僅接受唯一的來源——用戶的輸入。 假設有用戶想輸入一個古怪的字符串來執行邪惡的命令,無所謂,反正這是他們自己的計算機! 然而在其他語言里,程序通常得接受來自不可信的用戶的輸入。Vim是一個特殊的環境, 在此無需擔心一般的安全性問題。
第二個原因是因為Vimscript有時候處理問題的方式過于晦澀難懂且稀奇古怪。 這時`execute`會是完成任務的最簡單,最直白的方法。 在大多數其他語言中,使用"eval"不會省下你多少擊鍵的生命,但在Vimscript里這樣做可以化繁為簡。
## 練習
瀏覽`:help execute`來明了哪些命令你可以用`execute`實現而哪些不可以。 但當涉獵,因為我們很快將重新審視這個問題。
閱讀`:help leftabove`,`:help rightbelow`,`:help :split`和`:help :vsplit`(注意最后兩個條目中額外的分號)。
在你的`~/.vimrc`中加入能在選定的分割(豎直或水平,上/下/左/右方位)中打開前一個緩沖區的映射。
- 前言
- 鳴謝
- 預備知識
- 打印信息
- 設置選項
- 基本映射
- 模式映射
- 精確映射
- Leaders
- 編輯你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 鍛煉你的手指
- 本地緩沖區的選項設置和映射
- 自動命令
- 本地緩沖區縮寫
- 自動命令組
- Operator-Pending映射
- 更多Operator-Pending映射
- 狀態條
- 負責任的編碼
- 變量
- 變量作用域
- 條件語句
- 比較
- 函數
- 函數參數
- 數字
- 字符串
- 字符串函數
- Execute命令
- Normal命令
- 執行normal!
- 基本的正則表達式
- 實例研究:Grep 運算符(Operator),第一部分
- 實例研究:Grep運算符(Operator),第二部分
- 實例研究:Grep運算符(Operator),第三部分
- 列表
- 循環
- 字典
- 切換
- 函數式編程
- 路徑
- 創建一個完整的插件
- 舊社會下的插件配置方式
- 新希望:用Pathogen配置插件
- 檢測文件類型
- 基本語法高亮
- 高級語法高亮
- 更高級的語法高亮
- 基本折疊
- 高級折疊
- 段移動原理
- Potion段移動
- 外部命令
- 自動加載
- 文檔
- 發布
- 還剩下什么?