使用ag.vim转义字符

时间:2014-10-14 17:58:44

标签: vim

在正常模式下,我希望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

我希望有人可以帮助我。感谢。

1 个答案:

答案 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>处的帮助)