私は最終的にナビゲーションのために矢印キーを捨てることに決めましたhjkl
。私が使用しVim hardmode
、矢印キーを無効にするプラグインを。
ナビゲーションにかなり早く慣れましたが、挿入モードでのナビゲーションは突然不可能であることがわかりました。
これに対する解決策はありますか?(既存の挿入モードは解決策ではありません)。
私は最終的にナビゲーションのために矢印キーを捨てることに決めましたhjkl
。私が使用しVim hardmode
、矢印キーを無効にするプラグインを。
ナビゲーションにかなり早く慣れましたが、挿入モードでのナビゲーションは突然不可能であることがわかりました。
これに対する解決策はありますか?(既存の挿入モードは解決策ではありません)。
回答:
あなたが持っている多くのオプションがあります。1つのオプション、そして最も簡単で簡単なIMOは、矢印キーの無効化を停止することです。多くの筋金入りのビマーが次のようなことを言う理由がわかります
二度と矢印キーを使用しないでください!矢印キーを使用するたびに、3分の時間を無駄にし、子犬が死に、誰かがEmacsに切り替えます!
(明らかに冗談です)しかし、矢印キーには目的があります。これらはナビゲートに非常に便利です。
挿入モード
コマンドラインで
一般に、矢印キーを使用しないように言われた場合、それは、よりvimのような方法でナビゲーションを再学習してほしいからです。に慣れておりhjkl
、挿入モードで主に矢印キーを使用する場合は、使用しないように強制する正当な理由はありません。
オプション#2は、ctrl-hjkl
カーソルキーのように機能するように再マップします。ホームローにとどまることができるので、これは素晴らしいことでありhjkl
、通常モードで使用して既に学習した筋肉の記憶によく適合します。実際、これが私がしていることです。このアプローチの主な欠点<C-j>
は、NUL
バイトを生成するため、ターミナルvimでのセットアップが苦痛になる可能性があることです。これを回避するには、Gvimを使用します。コンソールvimの簡単な修正があるかどうかはわかりません。
オプション#3は、<C-o>
小さなノーマルモードの動きを作るために使用します。たとえば、入力している場合
Hello world!
cursor^
そして、あなたはコンマを忘れてしまったことに気づき、やるのではなく、leftleftleftleftleftleft単に<C-o>b<C-o>h
や<C-o>2Fo
、や他の好きなノーマルモードの動きの組み合わせをすることができます。
もちろん、別のオプション、そして私がとても気に入っているのは、を使用Escすることです。通常モードに戻る前に、いくつかの小さな動きをします。あなたはむしろそれをしたくないと言いましたが、時にはこれは本当に最も効率的な方法です。
おそらく他にもいくつかのアプローチがありますが、これらは私のために働いている私が好きなものです。
<c-o>gk
との<c-o>gj
代わりに<Up>
and を使用していることに注意してください<Down>
。何故ですか?
gk
とgj
行が折り返されていても視覚的に行を上下します。
noremap <Up> <NOP>
...) 。通常モードではHJKLを学習するのに十分な時間を費やしますが、必要なときにそこにいます。または、少なくとも、これを常にオフにするか、常にオンにする間の快適な中間点であり、他のキーを再マップする必要はありません(ペイン間を移動するCtrl-HJKLのような多くの人)。
Controlキーを使用して、hjkl
移動キーを「ユニバーサル」移動キーに変換するのが好きです。ここに私の関連ビットがあります.vimrc
:
" In insert or command mode, move normally by using Ctrl
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
cnoremap <C-h> <Left>
cnoremap <C-j> <Down>
cnoremap <C-k> <Up>
cnoremap <C-l> <Right>
inoremap
ステートメントは挿入モードに適用され、ステートメントはcnoremap
コマンドモードに適用されます。(私はこのマッピングを長い間使用してきたので、それなしでコマンドモードの履歴をナビゲートする方法があるかどうか忘れていました。)
(編集:他の答えはすでにこの可能性について言及していると思います。それでも、実際のマッピングコマンドを見ると役立つかもしれません。)
...最良の選択は、ヒットしESC
、動き回り、再び挿入モードに戻ることです。
<C-h>
左に移動してから何度もヒットを開始するようなマッピングを作成する意味はありません。vimユーザーとして、同じキーを複数回押してスマートな動きを実現することはできません。
(ESC
キーが指の近くにない場合、キーのマッピングを作成することをお勧めします。)
...適切な選択は、<Leader>
キーを使用していくつかの動きを定義することです:
(指に近づき、快適に感じるため,
、<Leader>
キーとして使用します)
noremap! <Leader>h <left> "move cursor left
noremap! <Leader>j <down> "move cursor down
noremap! <Leader>k <up> "move cursor up
noremap! <Leader>l <right> "move cursor right
noremap! <Leader>w <esc>wi "move one word forward
noremap! <Leader>e <esc>ei "move forward to the end of word
noremap! <Leader>b <esc>bi "move one word backward
少量のテキストまたは単語を変更するだけでよい場合は、を使用できます<Ctrl-O>h/j/k/l
。
<Ctrl-O>
そのコマンドだけで通常モードに戻り、挿入モードに戻るので、少しの動きで通常モードに移行する必要がある場合は、キーを押す回数を節約できます。
参照:1. http://vim.wikia.com/wiki/Use_Ctrl-O_instead_of_Esc_in_insert_mode_mappings