12

我知道我的标题不是那么描述性/清晰,所以让我解释一下。

昨天我可以通过,Vimgrep and copen所以我在下面添加了以下行.vimrc

nnoremap <silent> ,/ :execute 'vimgrep /'.@/.'/g %'<CR>:copen<CR>

它的作用是在 vimquickfix list中为searched(highlighted)单词打开 a。

现在,当你按下Enter<CR>quickfix 列表时,它会将你带到 Vim 主窗口中的相应行。

现在,我面临的问题是我已经映射了我的<CRlike map <CR> o<Esc>,它在当前行的正下方创建了一个新行。

因此,如您所见,两者之间存在冲突。所以,我正在尝试的是想出一个 vim 函数,比如

伪代码

function IfNotInsideQuickFix()
    if buffer != QuickFix
        then map <CR> o<Esc>
    elif buffer == QuickFix
         Normal behaviour

Call function

这是输出:buffers

:buffers
  1 #a   "test.cs"                      line 0
  2 %a-  "[Quickfix List]"              line 1
Press ENTER or type command to continue

我没有编写 vim 函数的经验。所以,有人可以指导我吗?

PS:我知道我可以更改我的 Vim 映射来创建一个新行,但我想学习如何通过 Vim 函数来做到这一点

4

1 回答 1

23

您可以保持全局<CR>映射原样,但在本地快速修复窗口中恢复原始行为。这是通过一个:autocmd(在快速修复窗口打开时触发的)映射(不重新映射)<CR>(本地通过<buffer>)到自身上来完成的。

:autocmd BufReadPost quickfix nnoremap <buffer> <CR> <CR>
于 2012-08-16T08:39:53.017 回答