2016-05-13 11 views
4

私はVimショートカットnmap <enter> o<esc>またはnmap <enter> O<esc>を見つけました。これはEnterキーで空白行を挿入するので、非常に便利です。しかし、彼らはプラグインで大混乱を招く。たとえば、ag.vimはクイックフィックスリストにファイル名を入力してジャンプします。このウィンドウ(ファイルにジャンプする必要があります)でenterを押すとエラーE21: Cannot make changes; modifiable is offが表示されます。Vimバッファが変更可能かどうかを確認する方法はありますか?

クイックフィックスバッファにマッピングを適用しないようにするには、私はこれを行うことができます。

" insert blank lines with <enter> 
function! NewlineWithEnter() 
    if &buftype ==# 'quickfix' 
    execute "normal! \<CR>" 
    else 
    execute "normal! O\<esc>" 
    endif 
endfunction 
nnoremap <CR> :call NewlineWithEnter()<CR> 

これは動作しますが、私が本当にしたいことはいかなる変更不可能なバッファにマッピングを避けるためであるだけでなく、のQuickFixウィンドウで。例えば、マッピングは位置リストに意味をなさない(そして、それを使用する他のプラグインを壊すかもしれない)。変更可能なバッファに入っているかどうかを確認するにはどうすればよいですか?

答えて

5

使用'modifiable'

" insert blank lines with <enter> 
function! NewlineWithEnter() 
    if !&modifiable 
     execute "normal! \<CR>" 
    else 
     execute "normal! O\<esc>" 
    endif 
endfunction 
nnoremap <CR> :call NewlineWithEnter()<CR> 
6

あなたのマッピングでオプションmodifiablema)を確認することができます。

ただし、関数を作成してマッピングで呼び出す必要はありません。 <expr>マッピングは、それらのユースケースのために設計されています

nnoremap <expr> <Enter> &ma?"O\<esc>":"\<cr>" 

(上記の行がテストされ、私はそれが行くべきだと思いませんでした。)

<expr> mappingの詳細については、:h <expr>

+0

感謝を行います@ケント - 正確に私の質問に答えるので、私は他の答えを受け入れましたが、私の.vimrcであなたのマッピングを使用しています:) – Sasgorilla

関連する問題