通常モードでのj、CTRL-J、<NL>およびCTRL-Nの違いは何ですか?


12

私は誰かが使用しているWebのどこかを見ましたが、Ctrl-Jこのマッピングを知らなかったので、関連するドキュメントを調べて次のことを見つけました:

j           or
<Down>      or
CTRL-J      or
<NL>        or
CTRL-N          [count] lines downward linewise.

それはいくつかの質問に私を導きます:

  • 何ですか<NL>:を<CR>押すEnterと、デフォルトで通常モードで1行下に移動しますが、なぜ<NL>ここにあるの<CR>ですか?
  • これらのマッピングの違いは何ですか:これら5つのオプションはすべて同じように1行下に移動しますか?私のテストによると、私はイエスと答えますが、それは私の次の質問につながります。
  • なぜ、まったく同じことを行うに5つのマッピングがあります:私はそれを理解することができますjし、<down>vimのマッピングに使用されていないユーザーのために保管されているが、それ以外のマッピングはなぜ存在するのか?
  • どちらを使用するのがより興味深いのか:前の質問の続きです:可能性が非常に多い場合、異なる利点があるか、特定のユースケースで使用する方が良いと思います。それらのユースケースは何ですか?

私が見たときに、これらのコマンドの冗長性がさらに奇妙見つける:h kまで行くための唯一の3つの方法があります:k<UP>ctrl-p。ボーナスの質問は次のとおりです。なぜ下降するのに5つの方法があり、上昇するのに3つの方法しかないのでしょうか。


彼らはデフォルトのCtrl-Jバインディングを使用していましたか?少なくとも私が知っている人たちの間Ctrl-J/Kでは、「開始行と同じインデントレベルを持つ次の行までダウン/アップ」にマッピングするのが一般的なようです。
アーロンデュフォー

4
「なぜ下降するのに5つの方法があり、上昇するのに3つの方法しかありませんか」に答えたい まあ-それは、人生で物事が南に行くのが簡単だからです!:)
ヴァンレーザー

@VanLaserは本当に素晴らしい答えです。ドキュメントにこのヒントを追加することを検討してください。;-)
statox

@VanLaser残念ですよね。その速度で、すべての人類はあっという間に無に陥ります!
xji

「希望を捨て、<CR>ここにいるすべての人」
-VanLaser

回答:


15

あなたが言及したことは興味深い<CR><CR>技術的には行の先頭に移動することを意味するために使用されます。<NL>、または改行とも呼ばれる改行(通常はLF)と呼ばれ、次の行に移動することを意味します。時間の経過とともに、ほとんどのアプリケーションで区別が失われました。1Enter通常、押すとキャリッジリターンが発生します(押すと、Unix端末でCtrlVEnter表示さ^Mれるはずです)。<NL>の制御コードはCtrlJです。

CtrlN驚いた。2によれば、それはシフトアウト文字です:man ascii

Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
────────────────────────────────────────────────────────────────────────
016   14    0E    SO  (shift out)             116   78    4E    N

ウィキペディアによると、キャラクターのシフトインシフトアウト

...電気機械式タイプライターまたはテレプリンターで、通常は赤と黒で上下に別の色に上下に分割される、命名法、色付きのリボンをシフトする方法を提供しました...

それがどうやってダウンすることを意味するようになったかは、私には謎です。


なぜ5つの方法で下降し、3つしか上昇しないのですか?

さて、3つの上昇方法にはすべて、対応する下降方法があります。(CtrlPおそらく、の補数でありCtrlN、ここではシフトイン/アウトは関係ないことを意味します)。余分な2つのウェイ(<NL>またはCtrlJ)は、実際には同じウェイの2つの表現です。<NL>タイプライター時代からの継承であり、当時は、上昇する鍵はなかったと思いますが、下降するだけです。

こちらもご覧ください:

1場合によっては重要です(ほとんどの書式設定された印刷機能/ツールを使用した印刷\r(キャリッジリターン)および\n(ラインフィード)は依然として古い意味を保持しています)。

2この表は、アルファベットが同じ行の文字の制御コードに対応するように配置されています。


3
私はいつも思ったCtrl-Nためだった、とCtrl-Pのためだった前回。それは、とにかくEmacsで彼らが支持しているものであり、そこでバインドされnext-lineていprevious-lineます。また、Ctrl-Pシフトしません。それはデータリンクエスケープシフトインCtrl-Oです。
リシス

@Lithis私は訂正します。
ムル

2
@Lithis正直に言って、Emacsについて知っているのはcx ceだけです。
ムル

歴史的かつ明確な答え、Muruに感謝します!私は答えがしばしばそこにあるキャラクターのアスキーコードを考えるべきだった。
statox

@muru Emacsには実際に提供するものがたくさんあるので、それはあまりにも悪いことです。特に、私にとって非常に役立つorg-modeです。Spacemacs github.com/syl20bnr/spacemacsプロジェクトをチェックすることをお勧めします。これは、Vimエミュレーションに重点を置いているため、使用する従来のEmacsコマンドを知る必要はありません。たぶんそれはあなたの認識を少し変えるでしょう。
xji

8

を参照してください:help key-notation

  1. <NL>は「改行」を<CR>意味し、「復帰」を意味します。

    これらは、現在の行を分割する2つの異なる方法です。これらは歴史的に異なる制御文字(ctrl-jおよびctrl-m)にバインドされていますが、通常は同じキーで挿入されます<CR><NL>この文脈での使用は直観に反すると思われることに同意します。

  2. これらのすべての「マッピング」(実際にはマッピングではありません)は、まったく同じように動作します。

  3. 履歴、主にクロスプラットフォームの制約。

    ビルジョイの端末専用のモーションキーはありませんでしたが、矢印のステッカーがhjklキーにありました。当時、モーダルエディターはまれであったため、これらのキーを押しても、関連付けられている文字が挿入されているだけでした。あなたは押していた<C-h><C-j><C-k>および<C-l>画面上のカーソルを移動します。

    あなたが見ることができるように、そこにはかなりのオーバーラップの間だj<C-j><NL><Down><C-n>一般的にVimの「次」を意味しますが、仲間と一緒にまとめられたのは簡単にわかります。

  4. それらはすべて同義であるため、最適なものを自由に使用できます。

    <CR>たとえば、独自のマッピングに使用する興味深いキーです。


啓発してくれてありがとう!私は<CR>マッピングに大いに同意します。また、もう1つ質問があります。これらの「キーの組み合わせ」は実際にはマッピングと呼ばれませんが、どのように呼び出すべきかわかりません。
statox

それは興味深い質問です。私はそれらを「コマンド」と呼ぶ傾向があります。
ロメイン

私は間違っているが、同様EXモードコマンドを参照する「コマンド」ではないことが:ls:substitutenew...など、?
statox

x「コマンド」でもあります。
ロメイン

実際、私はちょうどそのドキュメントコール見たxddc、などの「コマンド」を。あなたは右でなければならないので、私はそれを推測しjたり^Jもコマンドです。
statox
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.