12

私のタイトルはそれほど説明的/明確ではないことを知っているので、説明させてください。

昨日は横切ることができるVimgrep and copenので、以下の行を追加しました.vimrc

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

それがすることは、vimquickfix listの単語を開くことです。searched(highlighted)

クイックフィックスリストを押すEnter<CR>と、メインのVimウィンドウの対応する行に移動します。

今、私が直面している問題は、現在の線のすぐ下に新しい線を作成する<CRようなものをマッピングしたことです。map <CR> o<Esc>

したがって、ご覧のとおり、2つの間に競合があります。だから、私が試しているのは、次のような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 に答える