Enterをクイックフィックス以外のカスタムコマンドにマップする方法


9

折りたたみをすばやく開閉できるように、再マップ<cr>(Enter)しましたza

ただし、クイックフィックスウィンドウを使用してEnterキーを押すと、エラーのある行にジャンプしなくなりました(クイックフィックスウィンドウに存在しない折り畳みを開閉しようとしているため)。

クイックフィックスウィンドウに入るときに、マッピングを無効にするか、ローカルで再設定する方法はありますか?

回答:


13

これを行うには、式マッピングを使用するのが最も簡単な方法です。

nnoremap <expr> <CR> &buftype ==# 'quickfix' ? "\<CR>" : 'za'

これは、quickfixウィンドウにいるかどうかを確認するマッピングを定義し、a <CR>またはzaそれに応じて実行します。

見る:

  • :h :map-expr
  • :h 'buftype'
  • :h expr1
  • :h string

関数へのマッピング

また、quickfixウィンドウから呼び出されたときに通常のEnterを実行し、それ以外の場合は「za」を実行する関数を定義することもできます。これはあなたがやろうとしていることには効率的ではありませんが、通常のモードコマンドよりも複雑なものにマップする場合に役立つ情報であるため、ここには残しません。

function! FoldingEnter()
  if &buftype ==# 'quickfix'
    execute "normal! \<CR>"
  else
    normal! za
  endif
endfunction

nnoremap <CR> :call FoldingEnter()<CR>

なぜ使用する必要\<があるの"<CR>" hereか尋ねてもいいですか?
voldikss

2
@Voldikss文字列に単一の復帰文字を含める必要があります。これを実現する方法は2つあります。押す<C-V><C-M>とキャリッジリターンを文字どおり入力できますが^M、Vimの外部に表示され、Vimの外に簡単にコピーアンドペーストできないか、Vimの文字列定数表記を使用できます。(を参照してください:help expr-string。)バックスラッシュを含めなかった場合"<CR>"、文字列には一連の4文字(小なり、大文字C、大文字R、大なり)が含まれます。
リッチ

1
おかげで、私は今それを理解しています。:help expr-stringは重要。
voldikss
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.