2011-04-26 20 views
4

我想從我的vimrc文件中使用地圖的「地圖」的關鍵是這樣的:如何從地圖和內調用VIM功能「:拆分」

map <C-I> :split ~/some/file 

該命令實際工作正常。

我的問題是:如何從地圖/分割線內的文件路徑中調用vim函數(本例中爲「resolve()」)。這不起作用,但希望你得到的觀點:

map <C-I> :split =resolve("~/some/file") 

也許它使用call()?一般來說,我顯然對vim腳本感到困惑。謝謝你的幫助!

回答

6

這樣做有兩個額外的方式,將外工作的映射,並且是更安全的,然後使用<C-r>(POSIX允許文件名與任何字節但\x00,包括控制碼):

nnoremap <C-i> :execute "split" fnameescape(resolve("~/some/file"))<CR> 
nnoremap <C-i> :split `=resolve("~/some/file")`<CR> 

在第二種情況下不需要轉義,但文件名不能包含換行符(它不會傷害,只會產生一個錯誤)。

另一個需要考慮的事情:

  1. 使用nnoremap,它將使你,例如,;:交流的意義,而不改變地圖,還可以防止您的地圖通過插件被寵壞了,除非他們重新定義<Tab>映射(<C-i><Tab>相同)。強制正常模式是因爲在其他模式下會產生意想不到的結果。
  2. 轉義參數:fnameescape(resolve("~/some/file")),它將防止帶空格的文件名錯誤。
  3. 你可以寫<C-r> @Austin Taylor建議寫入原始控制代碼。我不喜歡在文件中包含任何內容,因爲它會使差異在終端中不可見。
1
map <C-I> :split ^R=resolve("~/some/file")<cr><cr> 

如果你把這個在.vimrc,鍵入C-v C-r鍵入^R字符。

+0

謝謝!我忘記了^ R是命令模式的「插入」。 – svec 2011-04-26 15:44:09