私は分割画面で複数のバッファを持つ複数のタブがあるとします。別のタブに切り替えると、挿入モードから通常モードに切り替わりますか?
1つのバッファで編集モードになり、別のタブ(ctrl-pageDown)に切り替えると、私はまだ挿入モードです。
タブを変更すると自動的に通常モードに切り替える方法はありますか?
さらに元のバッファに戻ったときに挿入モードに戻ることは可能ですか?
私は分割画面で複数のバッファを持つ複数のタブがあるとします。別のタブに切り替えると、挿入モードから通常モードに切り替わりますか?
1つのバッファで編集モードになり、別のタブ(ctrl-pageDown)に切り替えると、私はまだ挿入モードです。
タブを変更すると自動的に通常モードに切り替える方法はありますか?
さらに元のバッファに戻ったときに挿入モードに戻ることは可能ですか?
BufLeave
では、どのモードに入っているかを確認してバッファ変数を設定して、それが存在するかどうかを確認してそのモードに移行する関数を呼び出すことができます。
mode()
、b:var
のヘルプを参照してください。
.vimrc
のサンプルがあります。今のところこの目的のために書いたので、私はそれを自分で使い始めました。それは役に立つと思います。
au BufLeave * call ModeSelectBufLeave()
au BufEnter * call ModeSelectBufEnter()
function! ModeSelectBufLeave()
let b:mode_select_mode = mode()
" A more complex addition you could make: if mode() == v, V, <C-V>, s, S, or <C-S>, store the selection and restore it in ModeSelectBufEnter
endfunction
function! ModeSelectBufEnter()
let l:mode = mode()
stopinsert " First, go into normal mode
if (l:mode == "i" || l:mode == "R" || l:mode == "Rv") &&
\ (!exists('b:mode_select_mode') ||
\ b:mode_select_mode == "n" ||
\ b:mode_select_mode == "v" ||
\ b:mode_select_mode == "V" ||
\ b:mode_select_mode == "\<C-V>" ||
\ b:mode_select_mode == "s" ||
\ b:mode_select_mode == "S" ||
\ b:mode_select_mode == "\<C-S>")
normal l
" Compensate for the left cursor shift in stopinsert if going from an
" insert mode to a normal mode
endif
if !exists('b:mode_select_mode')
return
elseif b:mode_select_mode == "i"
startinsert
elseif b:mode_select_mode == "R"
startreplace
elseif b:mode_select_mode == "Rv"
startgreplace
endif
endfunction
あなたの.vimrcに
autocmd TabEnter * stopinsert
のような非常にシンプルなものを追加してみてください可能性があります。
彼は 'TabEnter'ではなく' BufEnter'を望んでいます。 –
私は自分の.vimrcに以下があります。
nmap <C-b> :b#<CR>
imap <C-b> <ESC>:b#<CR>
これは私が別のバッファに切り替えるが、通常モードで私を残すために、通常または挿入モードではCtrl + Bヒットすることができます。
imap <C-b> <ESC>:bnext<CR>i
これができるようになりますが、あなたがたときに挿入モードではCtrl + Bをヒットし、あなたがそこに着くとき、挿入モードであなたを入れて次のバッファに切り替える:
あなたの質問については、あなたはこれを行うことができます。
同じ2つのバッファ間を行き来する場合は、元のマッピングを使用する方が便利です。もちろん、3つすべてを使用する場合は、最後に別のキーの組み合わせが必要です。
vimrcマッピングの数が増えるにつれて奇妙な問題に直面したくない場合は、 'inoremap' /' nnoremap'を使うべきです。 – ZyX
@ZyX - マッピングのrhsに '
コマンドモードに入るために ';'を使い、インライン検索を繰り返すために ':'を使いたいと思ったら(例えば)問題になります。{rhs}に{lhs}を持つことは、{rhs}に他のマッピングの{lhs}を持つことと比べてもそれほど問題はありません。 – ZyX
テキストを編集する場合にのみ挿入モードを使用してください。これはVimモダリティが設計したものです。テキストの編集を中止しました - 挿入モードを終了しました。 – ZyX
グレッグの答えは簡単な「挿入モードから抜け出す」ことができます。私の答えは、「より良い」原型復帰モードを提供します。 –
私はZyXにもっと同意できませんでした。私の答えは質問に答えるためだった。私は実際にあなたがあなたが問題を解決する編集をしたすぐにインサートモードを残すために自分自身を訓練することをお勧めします。 gt以外にも、CTRL-pgdnを使うよりもはるかに速いです。 –