0

I have this mapping in vim

map f :Ag --ignore node_modules

I would like to append the result of the 'getcwd()' at the end of the command.

Something like (not working, but gives the idea):

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

So the command in vim would look like

:Ag --ignore node_modules ~/project

More context

I am using The silver search through vim using ag.vim. I want to have a normal mode mapping that specify the current working directory in the ag command.

https://github.com/ggreer/the_silver_searcher

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

Thank you. JF

4

3 回答 3

3

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

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

这是@Kent 使用<expr>.

PS:你应该使用:noremap; 它使映射不受重新映射和递归的影响。

于 2014-12-04T15:21:09.307 回答
2

尝试:

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

如果不提供目录,ag就取当前目录,同理getcwd()吧?

于 2014-12-04T15:17:09.160 回答
0

还有一种方法是使用表达式寄存器 via<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>
于 2014-12-07T09:38:57.560 回答