2014-12-04 41 views
0

我有這樣的映射在vim如何將一個函數的輸出附加在正常映射命令

映射f:AG --ignore node_modules

我想追加的結果命令末尾的'getcwd()'。

喜歡的東西(不工作,但給人的想法):

映射f:銀--ignore node_modules:調用GETCWD()

所以在vim命令會是什麼樣子

:銀--ignore node_modules〜/項目

更多內容

我正在使用通過vim使用ag.vim的銀色搜索。我想要一個正常的模式映射,指定ag命令中的當前工作目錄。

https://github.com/ggreer/the_silver_searcher

https://github.com/rking/ag.vim

謝謝。 JF

回答

2

嘗試:

nnoremap <expr> f ':Ag blahblah '. getcwd() 

如果不提供目錄,ag將當前目錄,同樣作爲getcwd()吧?

+0

嗨,命令不起作用。我不斷收到'E78:未知的標記'。有關目錄的評論,文件說「{目錄}(默認爲當前目錄)」。由於我經常使用NERDTree更改cwd,因此我希望看到目前我正在使用的目錄,以最大限度地減少我工作時的人爲錯誤。 :) 謝謝你的幫助。 – 2014-12-04 15:29:28

+0

你確定你在映射中添加了expr嗎? – Kent 2014-12-04 16:06:21

+0

我早上給了它另一個嘗試,它的工作!我以前一定犯過錯誤。謝謝。 – 2014-12-05 13:18:25

3

Vim的評估規則與大多數編程語言不同。您需要使用:execute來評估變量;否則,這是從字面上理解的;即Vim使用變量名稱本身作爲參數。

nnoremap f :execute 'Ag blahblah ' . getcwd()<CR> 

這是@ Kent使用<expr>的替代方案。

PS:You should use :noremap;它使映射免於重映射和遞歸。

+0

嗨,謝謝。這工作。 – 2014-12-05 13:18:42

0

還有一種方法是通過<c-r>=使用表達式寄存器執行表達式,getcwd()

nnoremap <leader>f :Ag blahblah <c-r>=getcwd()<cr><c-b><s-right><s-right>><space>''<left> 

我加了<cr>後的部分blahblah後插入單引號和把光標在他們之間。

注意:不要遮蓋f命令。這非常方便。見:h f。看着使用領導者。見:h mapleader

如需更多幫助,請參見:

:h c_ctrl-r 
:h "= 
:h c_ctrl-b 
:h c_<s-right> 
+0

謝謝你的回答。您在表達式寄存器中使用了一種有趣的方法。我不知道那件事。感謝分享。另外,我向你保證,我的映射看起來像這樣: nnoremap F ':銀--ignore node_modules --ignore資產-S 「」 「'。GETCWD()。 '」 ' 和 nnoremap FW ':銀--ignore node_modules --ignore資產-S 「」 「'。GETCWD() '」 ' 我沒有在原崗位的顯示完整的映射簡單。我基本上和你做同樣的事情。 :) – 2014-12-09 13:58:55

相關問題