「Vimで矢印キーを使用しないでください!」
ランダムなスピーカーからこれを聞いたが、なぜ彼に尋ねる機会がなかった。また、矢印キーを使用しない場合、挿入モードでカーソルを移動するにはどうすればよいですか?
「Vimで矢印キーを使用しないでください!」
ランダムなスピーカーからこれを聞いたが、なぜ彼に尋ねる機会がなかった。また、矢印キーを使用しない場合、挿入モードでカーソルを移動するにはどうすればよいですか?
回答:
矢印キーを使用するのは悪い習慣とみなされます。矢印キーを使用している場合、vimの多くの素敵な機能を利用できない可能性が高いからです。
人々が最初にvimを使い始めたとき、これは従来のテキスト編集に似ているため、挿入モードのままになる傾向があります。ただし、vimで効果を発揮するには、実際にテキストを入力しているときにのみ挿入モードにする必要があります。カーソルを動かしたい場合は、通常モードにする必要があります。デフォルトではほとんど通常モードになっているはずです。
通常モードでは、移動するための数百万のショートカットがあります。を使用hjkl
して、一度に1つのスペースを移動したり、単語、段落などで移動したりできます。通常モードの場合、矢印キーhjkl
は遠くにあるため、代わりに矢印キーを使用しても意味がありません。
矢印キーを使用している場合、vim「間違った」を使用しているという態度があります。真実は、vimには非常に急な学習曲線があるため、学習している間は正気を保つために何でもします。私が最初にvimを使い始めたとき、私はすべてを「間違った」方法で行いました。vimのコマンドをもっと学んだら、習慣を壊す問題はありませんでした。
例として、私が最初に始めたとき、引用符でテキストを変更したいと言います:
String mystring = "I want to change this";
挿入モードに入り、矢印キーを使用して文字列の最後に移動し、文字列が消えるまでバックスペースを押して、新しいテキストを入力します。
はるかに良い方法は、文字列内の任意の場所にカーソルを置いて(通常モード)、を押すことci"です。これはchange
in
"
。新しいテキストを入力できるように、引用符の間のすべてを削除し、挿入モードにします。
ci<
そしてci)
同様に動作し、キーボードからマウスに手を動かす必要はありません。括弧の先頭に移動してからコンテンツを変更する場合はf(ci(
機能します。
/want
では「Enter」を押して単語「want」に到達し、次に「do」を実行しますci"
。
hjkl
):マッピングup
し、down
互いに垂直に区別できない2つのキーに、それはだ.....左と右のキーからはおろか悲劇的なイデオロギー盲検傲慢のデモンストレーション。
要するに、ナビゲーションインターフェイスとしてキーをVim
使用するのhjkl
は、古い「ADM-3A」端末の残骸であり、これらのキーに矢印が付いているためです。
以来
vim
由来しvi
、それは同じhjklキーを使用しています。
矢印キーの文字ベースの置換により、標準の入力設定から手を離さずにテキストをナビゲートできます。これは間違いなく、手を動かして矢印キーを押すよりも効率的で高速です。参照番号2(リソースを参照)に概説されているように、これはこの利点の終わりではありません。VIMには、手を動かさずにアクセスできる他の多くのショートカットがあります。
あなたの質問の2つの部分に対するいくつかの非常に詳細かつ正確な答えがあります:矢印キーの置換に関して、私は迅速かつ要約的な方法で答えましたが、あなたの挿入質問については、以下のリソースをご覧ください。
hjkl
挿入モードでは動作しないので、これは質問に対する答えですか?
hjkl
vimで使用できるという事実は、誰かが矢印キーを使用してはならない理由を教えてくれません。ちょうど私が自転車に乗って仕事をすることができるという事実が、誰かがジョギングを絶対にしない理由を説明しないのと同じです。
この愚かなマントラは、ホームの列が2本目の背骨のようなタッチタイピストや、かっこよく見せたい非タッチタイピストによって繰り返されることがよくあります。タッチタイピストでない人にとって、ホームの列はそれほど特別ではなく、右手を少し動かして矢印に到達することはまったく問題ではありません。
考慮すべき重要なことは、そのマントラを繰り返す人々が代わりに使用することを提案するものです。
ほとんどの場合、彼らはを使用することを主張しhjkl
ます。
viの作者が使用するキーボードに物理的な矢印キーがないためにこれらのキーのみが使用され、矢印キーに対する引数は単なる合理化であるという事実を除外すると、hjkl
とにかく矢印よりもわずかに優れています。はい、hjkl
矢印を使用することの唯一の利点は、矢印との間の右手の小さな動きをスキップすることです。そのメリットがトラブルの価値があるかどうかはあなたの電話です。
しかし、右手のその動きは、矢印だけを使用するのが非効率的な理由ではありません。テキストを編集するために必要な動きのほとんどははるかに広い範囲を持っていますが、文字ごとや行ごとの移動を制限するため、非効率的です。
右矢印を13回叩くのは非効率的で退屈です。それはそのハンマー方が良いl
キー13回?いいえ、それは同様に愚かです。
ターゲットに到達するまで右矢印を押したままにするのは退屈ではありませんが、エラーが発生しやすく、最後に必要な非決定的なスローダウンのため、13ヒットとほぼ同じくらい非効率的です。それがあることをよりよく保つためにl
押されたキーを?いいえ。もちろんありません。
ありがたいことに、ほとんどのGUIツールキットには、Ctrl+Right
単語単位で移動したり、EOLに移動したり、次の段落に移動したりできるコンボが用意されています。これらのショートカットは、単一の矢印を使用する場合よりもはるかに高速かつインテリジェントにナビゲートするのに役立ちます。と同じhjkl
ですか?いいえ、ありません。必要に応じてカウントを使用できますが、モーションごとにキャラクターをカウントしたいのは誰ですか?14k
の助けを借りて行うことrelativenumber
は素晴らしいですが、水平方向の動きはどうですか?大きな動きの場合hjkl
、実際には修飾キー+矢印よりも劣ります。そして何だと思う?大きな動きは、私たちが最も必要とするものです。
しかし、私たちは幸運な野郎であり、私たちのお気に入りのエディターには、矢印と hjkl
:の両方を中心に円を描く多数のモーションがありますbBeEwW/?*#{}()
。これらのコマンドはされている計り知れないほど以上の力を与えるhjkl
と、あなたが使用している場合は、より多くの論理的かつ直感的にほとんどの部分はCtrl+Right
、友人。
からまたは<Right><Right><Right><Right><Right><Right><Right><Right><Right>
への切り替えは、途方lllllllll
もなく9l
無意味です。
から<Right><Right><Right><Right><Right><Right><Right><Right><Right>
に切り替える<C-Right>
方がはるかに優れています。そこから、w
簡単にすばやく切り替えることができます。<nop>
矢は必要ありません!
これらのコマンドがより便利で、より強力で、より直感的であればhjkl
、なぜ多くのブロガーやコメンテーターが矢印を置き換えることを主張するのhjkl
でしょうか?
私は持っています。いいえ、アイデア。
結論として、hjkl
私たちは常に2文字または線分だけ移動する必要があるため、ツールベルトに配置しますが、それらは多くの場合、森を隠す木ではありません。矢印に反して説教する人々に注意してください。彼らがあなたのために用意しているものはまったく良くないかもしれません。
hjkl
は役に立たないがhjkl
有用である。
他の人は、カーソルを動かす他の方法が好まれる理由を説明しましたが、質問に答えるとはほとんど言われていません。矢印キーを使用するのはなぜ悪い考えと考えられますか
主な理由(および@Squeezyが多少暗示される)は、VT100のような端末の時代に、矢印キーが実行中のプログラムによって解釈されるエスケープシーケンスを生成したためだと思います。(矢印キーはASCIIで表されないため、矢印キーの入力は何らかの「特別な」方法で伝達される必要があります。)エスケープシーケンスは通常、次のようなものでした
ESC [ A
端末のプロパティ、接続、およびカーソルモードによって異なります。シェルまたはプログラムが端末用に適切に構成されていないと、エスケープシーケンスが矢印キーとして理解されません。
私が大学にいたとき、VT100ターミナルを介してUltrixにログインし、挿入モードでviを押しながら矢印を押すと、ESC
「挿入モードから抜け出す」と解釈され、次[ A
は通常モードのコマンドと解釈されました。明らかに、ユーザーが望むものや期待するものではありません!
最近では、特にGUI環境では、端末と矢印キーの処理がより堅牢になっているようです。ただし、SSHまたはTelnetを介してvimを使用する場合も同じ問題が発生します。
矢印キーを使用すると、QWERTYレイアウトを使用する場合はホームローから、Dvorakまたはその他のレイアウトを使用する場合は文字パッド(?)から指を移動させるため、眉をひそめます。
矢印キーには問題があります。これは、viですでに知られていましたが、1200ボーモデムなどの低速接続で発生します。矢印は、などのESCシーケンスに変換されESC a
ます。ESCとaの時間が長くなりすぎると、BELが聞こえる(またはフラッシュが聞こえる)後、追加モードになります。これはhjkl
キーとともに表示されません。
ESC [ A
あなたが言っているのは何だと思いますか?
ESC [ A
DEC VT-100端末(ANSI端末はDEC VT-100の強力な派生物でした)矢印です。IIRC ESC A
は、ADM-3Aの矢印、またはおそらくDEC VT-52の矢印でした。ポイントは同じままESC
ですが、矢印キーの一部として送信された文字は、ESC
手動で入力した文字と簡単に混同されます。
2番目の質問について:
[I]矢印キーを使用しない場合、挿入モードでカーソルを移動するにはどうすればよいですか?
マスターであり、したがって矢印キーを軽daする人にとって、「モード」の概念は同様に存在しません。
マスターは、挿入モードではなく、のようなオペコードで始まる、またはペイロードテキストが後に続き、で終わる完全な挿入または置換コマンドを使用して新しいテキストを追加します。コマンドには構文があるため、マシンはコマンドの構文を受け入れる際に状態を走査しますが、エディターのマスターモデルでは、これらはモードを生成しません。実習生が単純に「モード」と呼ぶものは、マスターにとって未完成のコマンド状態であり、マスターが回避する最も忌まわしい状況です。i
o
cw
ESC
マスターは、挿入または置換コマンドの途中でカーソルが示す次の文字位置以外のテキストを挿入または削除する必要があることに気づいたときはいつでも、挿入コマンドを終了し、効率的な多数の移動コマンド(hjkl
より強力な方法が明らかに適用できない場合、低レベルに再分類)。
また、マスターがコマンドを未完成のままにするような方法で気が散ることはめったにないので、マスターは、ESC
「万が一に備えて」発行された余計な入力により、エディターがビープ音を発することはめったにありません。
(ただし、ネットワークが遅れたり、マシンが動かなくなったりすると、マスターはESC
他の全員と同じように猛烈に繰り返しキーを叩きます。)
vi
のは、コマンド入力モードで挿入し、その後、公正であることを、我々は他のエディタ内のすべてのこのようなモードを特定し、モーダルそれらを呼び出す必要があります。たとえば、EmacsでCtrl-Xを押すと、たとえば、Ctrl-Sを押してドキュメントを保存できる「モード」になりますが、この「モード」以外では機能しません。
はい、上記の多くの理由から、vi
元々はを使用するようhjkl
に書かれていましたが、「never」はかなり大きな文です。
私はvim
自分が望むように振る舞うように変更します(そして私が使用する他のツール)。これは私のマシンではうまく機能しますが、組み込み開発者として、私がサポートしているマシンにあるものを常に選択できるとは限りません。時折hjkl
ナビゲーションしかできない古いマシンに出くわしvi
ます。習慣を打ち破ってに切り替えるまで、1〜2秒ファイルに制御コードが挿入されますhjkl
。
「Vimで矢印キーを使用しないでください」と思い付く唯一の正当な理由です。矢印キーを処理できないマシンを使用できるようにするためです。それは「決して」と言うのはかなり薄い理由のように感じます。
矢印キーを使用しない場合、挿入モードでカーソルを移動するにはどうすればよいですか?
矢印キーを使用しないようにする主な理由は、挿入モードで移動できるためです。
新規ユーザー向けのvimの学習に関する最も奇妙な問題の1つは、vimの元に戻すコマンドが、最後のキーストロークではなく最後のアクションを元に戻すことによって動作することです。私の友人の多くは、それを離れる理由がないため、ずっと挿入モードにとどまっています。「元に戻すにはどうすればいいですか?」私は「コマンドモードから文字uを押してください」と返信します。vimがファイル全体を消去するとイライラします。
「Vimは、物事を正しく元に戻せない場合、非常に価値のないテキストエディターです。」
方法を学ぶ前にツールを使用することは困難です。
Vimが役立つのは、使用方法を学んだ後だけです。vimの力は、潜在意識の筋肉の記憶を通じて「そのことをもう一度行う」、「そのことを元に戻す」、または「このマクロホットキーを押したときにのみそのことを行う」ことを伝える方法にあります。「そのこと」が「ファイル全体を最初から最後まで入力する」になった場合、vimはまったく役に立ちません。
そのため、にいるときにのみテキストを入力する必要がありますinsert mode
。矢印キーを使用しないことは、より優れたvimユーザーになることを支援するための1つの方法にすぎません。
kboxでsshデーモンを実行しているAndroidデバイスにシェルでアクセスしながらvimを実行すると、コンフォートゾーンから抜け出すことができました。デバイスのAnroid Terminal Emulatorはボリュームボタンを使用して特別なキーコンボ(ctrl +何でも)を置き換えるため、この状況では通常キーボードで使用するいくつかのキーが機能しません。
たとえば、Insertキーはこの環境では機能しないためI
、挿入モードに切り替えるために使用しています。私が通常挿入モードをエスケープするために使用するEscキーも機能しないctrl + [
ため、代わりにエスケープするために使用しています。私が慣れているように、HomeキーとEndキーは機能しません。代わりに、私はに頼ってる0
と$
先頭または行の最後に到達する前に、私は気にしませんショートカット。
とにかく、矢印キーは私の状況ではいつものように機能しますが、ミニマリストのキーボードショートカットがあることを知ってうれしいです。
vimに書き込む前に次のコマンドを書くだけです。
これに関する1つの問題は、毎回それを書く必要があるかもしれないということです。
これが私の2¢です。
快適に感じることなら何でもしてください。異なるエディターを使用する場合、一貫性のために矢印キーを使用する方が簡単な場合があります。
一方、vi(およびvim)には特別なキーは必要ありませんが、おそらくは例外です。おそらく、IBMの古いselectricをハッキングして端末として機能させることができます。
注意すべきもう1つの点は、矢印キーが期待どおりに機能しない可能性があることです。動作しない端末を使用しました。それらがVimでどのように実装されているのか正確にはわかりませんが、均一ではないと確信しています。私のむらのあるメモリは、vimマクロとして実装された1つの実装を思い出すようです。
強化されたテキストエディタを備えたゲームの名前は、「急いで動き回り」、無駄な動きや繰り返しの動きを減らしているようです。あり、いくつかのあなたは(キーボードの寸法に応じて)矢印キーに文字キーから移動したときに失われた時間と比べてバックホーム列には。ただし、左手の小指または薬指の切り替えモードでESCキーにアクセスできる場合は、1つの滑らかな動きになり、編集セッション中に速度が向上します。
これが質問の2番目の部分の鍵です。左でESCを押し、右でhjklで移動して挿入モードを終了します。最終的には、ビートをスキップせずにこれを行うことができます。
ここで言及したことのいくつかを試すまで、Vimを使用したことはありませんでしたが、最も重要なのは「効率的な取得:ショートカットマッピング」セクションです