挿入モードでのナビゲーション


19

私は最終的にナビゲーションのために矢印キーを捨てることに決めましたhjkl。私が使用しVim hardmode、矢印キーを無効にするプラグインを。

ナビゲーションにかなり早く慣れましたが、挿入モードでのナビゲーションは突然不可能であることがわかりました。

これに対する解決策はありますか?(既存の挿入モードは解決策ではありません)。


8
はい:矢印キーを使用します:-)それが彼らの目的です
;

@Carpetsmoker矢印キーが使用可能な場合、私は.... hjklの代わりにそれらを使用する
STDCALL

5
しかし、アイデアは(つまり、それを使用して挿入モードを終了することをされただけで、すなわち、それがために意味何のために、小さな挿入は、他のコマンドが散在する)正確であるソリューション。間違っていない場合はヘルプで見ましたが、リンクが見つかったら投稿します。矢印キーではなく、それに慣れすぎているようです。
ヴィー

キーボードをバインドして、<kbd> super </ kbd> + <kbd> j </ kbd>のようなショートカットとして矢印を使用して下に移動できます。<KBD>スーパー</ KBD>のいずれかのボタンことができ、例えば<KBD>キャップ</ KBD>ロックかなり一般的である
ivanjermakov

回答:


25

あなたが持っている多くのオプションがあります。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することです。通常モードに戻る前に、いくつかの小さな動きをします。あなたはむしろそれをしたくないと言いましたが、時にはこれは本当に最も効率的な方法です。

おそらく他にもいくつかのアプローチがありますが、これらは私のために働いている私が好きなものです。


2
興味深い- <c-o>gkとの<c-o>gj代わりに<Up>and を使用していることに注意してください<Down>。何故ですか?
カイルストランド

4
@kylestrand gkgj行が折り返されていても視覚的に行を上下します。
DJMcMayhem

4
これだけでは答えを保証するのに十分だとは思いませんが、通常モードでは矢印キーを無効にし(これによりHJKLを学ぶ必要があります)、他のすべてのモードでは有効にします(noremap <Up> <NOP>...) 。通常モードではHJKLを学習するのに十分な時間を費やしますが、必要なときにそこにいます。または、少なくとも、これを常にオフにするか、常にオンにする間の快適な中間点であり、他のキーを再マップする必要はありません(ペイン間を移動するCtrl-HJKLのような多くの人)。
イタイファーバー

ところで、BASH他はviキーバインディングをサポートしています。これらのマッピングを使用すると、<ESC>を使用hjkl CMD史(上/下)を介して行くか、現在のコマンドmodiyすることができます(左に/右)
ロルフ・

9

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コマンドモードに適用されます。(私はこのマッピングを長い間使用してきたので、それなしでコマンドモードの履歴をナビゲートする方法があるかどうか忘れていました。)

(編集:他の答えはすでにこの可能性について言及していると思います。それでも、実際のマッピングコマンドを見ると役立つかもしれません。)


3

ヒットしてescからhjklwWbBおよびその他のナビゲーションを使用します。ハードモードのポイントは、より複雑なvimモーションでナビゲートすることを学ぶことです。通常のモードを使用して、小さな編集を行ってから新しい場所に移動します。

ハードモードを有効にして高速にナビゲートする方法を学習したくない場合は、同じトピックに関する別の質問から私の答えを確認してください。


3

1つまたは2つ以上のポジションを移動したい場合...

...最良の選択は、ヒットしESC、動き回り、再び挿入モードに戻ることです。

<C-h>左に移動してから何度もヒットを開始するようなマッピングを作成する意味はありません。vimユーザーとして、同じキーを複数回押してスマートな動きを実現することはできません。

ESCキーが指の近くにない場合、キーのマッピングを作成することをお勧めします。)

挿入モードで1つまたは2つの位置を移動する場合...

...適切な選択は、<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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.