在正常模式下,我希望K
使用ag.vim在光标下搜索单词。在视觉模式中,我希望K
搜索视觉选择。这就是我到目前为止所做的:
nnoremap <silent> K :Ag <C-R><C-W><CR>:copen<CR>
vnoremap <silent> K y:Ag <C-R>"<CR>:copen<CR>
但是,它不适用于需要转义的字符。 (据我所知,这是%
,#
,/
等字符
如果我在可视模式下选择以下文字<C-R>"<CR>:copen<CR>
并点击K
则会出现错误:
Error detected while processing function ag#Ag
来自ag.vim的主页:
有些角色有特殊意义,需要逃脱你的角色 搜索模式。例如,&#39;#&#39;。你必须像这样逃避它:Ag &#39; \\\ #define foo&#39;搜索#define foo。
所以基本上我需要在传递给#
之前使用\\\#
(上面的问题)转义输出+转义Ag
。
我希望有人可以帮助我。感谢。
答案 0 :(得分:1)
你需要逃脱这些角色。 这样的事情应该有效(这是未经测试的):
:xnoremap K y:<c-u>Ag <C-R>=shellescape(expand(@"),1)<CR>:copen<CR>
:nnoremap K :<c-u>Ag <c-r>=shellescape(expand("<cword>"),1)<cr>:copen<cr>
注意,我使用了xnoremap
而不是vnoremap,因此映射不会干扰选择模式。
另请注意,根据您的需要,您可能希望使用<cWORD>
而不是<cword>
(请参阅:h <cword>
处的帮助)