如何在普通映射命令中附加函数的输出

时间:2014-12-04 15:06:46

标签: vim ag

我在vim中有这个映射

  

map f:Ag --ignore node_modules

我想追加' getcwd()'的结果。在命令的最后。

喜欢(不工作,但提出想法):

  

map f:Ag --ignore node_modules:call getcwd()

所以vim中的命令看起来像

  

:Ag --ignore node_modules~ / project

更多背景

我正在使用ag.vim通过vim进行银色搜索。我想要一个普通的模式映射,在ag命令中指定当前的工作目录。

https://github.com/ggreer/the_silver_searcher

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

谢谢。 JF

3 个答案:

答案 0 :(得分:3)

Vim的评估规则与大多数编程语言不同。您需要使用:execute来评估变量;否则,字面意思;即Vim使用变量名称本身作为参数。

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

这是@ Kent使用<expr>的替代方法。

PS:You should use :noremap;它使映射不受重映射和递归的影响。

答案 1 :(得分:2)

尝试:

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

如果您不提供目录,ag将获取当前目录,与getcwd()相同吗?

答案 2 :(得分: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>