Quelle est la différence entre j, CTRL-J, <NL> et CTRL-N en mode normal?

12

J'ai vu quelque part sur le Web quelqu'un utiliser Ctrl-Jet comme je ne connaissais pas cette cartographie, j'ai recherché dans le document correspondant et j'ai trouvé ce qui suit:

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

Ce qui m'amène à plusieurs questions:

  • Qu'est-ce que c'est<NL> : je le verrais comme un équivalent <CR>car appuyer sur Enterdescendra d'une ligne en mode normal par défaut mais pourquoi est-il <NL>ici et non <CR>?
  • Quelle est la différence entre ces mappages : toutes ces 5 options descendent-elles d'une ligne de la même manière? Selon mes tests, je répondrais oui mais cela m'amènerait à ma prochaine question.
  • Pourquoi y a-t-il 5 mappages pour faire exactement la même chose : je peux comprendre cela jet <down>sont conservés pour les utilisateurs qui ne sont pas habitués aux mappages vim, mais pourquoi les autres mappages existent-ils?
  • Quand est-il plus intéressant d'en utiliser un de plus que l'autre : c'est une continuation de la question précédente: s'il y a tellement de possibilités, je suppose qu'elles ont des avantages différents ou sont mieux utilisées dans des cas d'utilisation spécifiques. Quels sont ces cas d'utilisation?

Je trouve la redondance de ces commandes encore plus étrange quand je regarde :h k: il n'y a que trois façons de monterons k, <UP>et ctrl-p. La question bonus est donc: pourquoi y a-t-il 5 façons de descendre et seulement 3 de monter?

statox
la source
Êtes-vous sûr qu'ils utilisaient la Ctrl-Jliaison par défaut ? Il semble courant, au moins chez ceux que je connais, de mapper Ctrl-J/Ksur "bas / haut jusqu'à la ligne suivante avec le même niveau d'indentation que la ligne de départ".
Aaron Dufour
4
Je voudrais répondre à "Pourquoi y a-t-il 5 façons de descendre et seulement 3 de monter?" Eh bien - c'est parce que, dans la vie, les choses vont bien plus au sud ! :)
VanLaser
@VanLaser vraiment une excellente réponse, ils devraient envisager d'ajouter cet indice dans le document! ;-)
statox
@VanLaser Dommage, n'est-ce pas. À ce rythme, toute l'humanité descendra dans le néant en un rien de temps!
xji
"Abandonnez l'espoir, vous tous qui <CR>êtes ici"
VanLaser

Réponses:

15

Intéressant que vous avez mentionné <CR>. <CR>ou retour chariot, techniquement utilisé pour signifier aller au début de la ligne . <NL>, ou saut de ligne, ou saut de ligne (généralement appelé LF), était utilisé pour signifier passer à la ligne suivante . Au fil du temps, la distinction s'est perdue dans la plupart des applications. 1 En Enterappuyant sur CtrlVEnter, vous obtenez généralement un retour chariot (essayez d'appuyer sur - vous devriez voir ^Mdans les terminaux Unix). <NL>Le code de contrôle est CtrlJ.

CtrlNm'a surpris. Selon 2 , c'est un caractère de décalage :man ascii

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

Le changement dans et le déplacement des caractères, selon Wikipedia :

... a fourni un moyen de changer, d'où la nomenclature, un ruban coloré, divisé longitudinalement généralement avec du rouge et du noir, de haut en bas vers l'autre couleur dans une machine à écrire électromécanique ou une téléimprimeuse ...

Comment cela a fini par signifier descendre est un mystère pour moi.


Pourquoi y a-t-il 5 façons de descendre et seulement 3 de monter?

Eh bien, les trois façons de monter ont toutes des façons correspondantes de descendre. ( CtrlPest probablement le complément de CtrlN, ce qui implique que le changement d'entrée / sortie n'est pas pertinent ici). Les deux voies supplémentaires vers le bas ( <NL>ou CtrlJ) sont en fait deux représentations de la même manière. <NL>est un héritage des jours de la machine à écrire - et à cette époque, je ne pense pas qu'il y avait une clé pour monter - seulement pour descendre.

Voir également:

1 Il est toujours important dans certains cas (l'impression \r(retour chariot) et \n(saut de ligne) d'utiliser la plupart des fonctions / outils d'impression formatés conservent toujours leur ancienne signification.).

2 Ce tableau est organisé de telle manière que l'alphabet correspond au code de contrôle du caractère sur la même ligne.

muru
la source
3
J'ai toujours pensé que Ctrl-Nc'était pour le suivant et Ctrl-Ppour le précédent . C'est ce qu'ils représentent dans Emacs, de toute façon, dans lequel ils sont liés à next-lineet previous-line. En outre, Ctrl-Pn'est pas intégré ; c'est une fuite de liaison de données . Shift in is Ctrl-O.
Lithis
@Lithis je me corrige.
muru
2
@Lithis Honnêtement, la seule chose que je sais sur Emacs est cx ce.
muru
Réponse historique et claire, merci beaucoup Muru! J'aurais dû penser au code ascii des caractères dans lesquels la réponse se trouve souvent.
statox
@muru C'est dommage car Emacs a vraiment beaucoup à offrir, en particulier son mode org qui m'a été extrêmement utile. Je vous recommande de consulter le projet Spacemacs github.com/syl20bnr/spacemacs , qui se concentre fortement sur l'émulation Vim afin que vous n'ayez besoin de connaître aucune commande Emacs traditionnelle à utiliser. Peut-être que cela changera un peu votre perception.
xji
8

Tu vois :help key-notation.

  1. <NL>signifie "saut de ligne" et <CR>"retour chariot".

    Ce sont deux façons différentes de rompre la ligne actuelle. Ils sont historiquement liés à des caractères différents de contrôle ( ctrl-jet ctrl-m) mais sont généralement insérés avec la même clé, <CR>. Je suis d'accord que l'utilisation <NL>dans ce contexte semble contre-intuitive.

  2. Tous ces "mappages" (ils ne sont pas en fait des mappages) se comportent exactement de la même manière.

  3. L'historique, principalement, également des contraintes multiplateformes.

    Il n'y avait pas de terminal dédié aux touches de mouvement de Bill Joy, mais les décalcomanies des flèches étaient sur les hjkltouches. Comme les éditeurs modaux étaient rares à l'époque, appuyer sur ces touches ne faisait qu'insérer le caractère associé dans ce que vous faisiez. Il fallait appuyer sur <C-h>, <C-j>, <C-k>et <C-l>pour déplacer le curseur sur l'écran.

    Comme vous pouvez le voir, il y a un chevauchement entre tout à fait j, <C-j>, <NL>et <Down>. <C-n>signifiant généralement "suivant" dans Vim, il est facile de voir comment il a été regroupé avec ses camarades.

  4. Puisqu'ils sont tous synonymes, vous êtes libre d'utiliser celui qui vous convient le mieux.

    <CR>, par exemple, est une clé intéressante à utiliser pour vos propres mappages.

romainl
la source
Merci pour l'illumination! Je suis très d'accord sur la <CR>cartographie. Encore une autre question: je sais que ces "combinaisons de touches" ne sont pas réellement appelées mappages mais je ne sais pas comment les appeler?
statox
C'est une question intéressante, j'ai tendance à les appeler "commandes".
romainl
Je peux me tromper , mais n'est pas « commande » , en référence aux commandes de mode ex aiment :ls, :substitute, new, etc ...?
statox
xest aussi une "commande".
romainl
En effet , je viens de voir que les appels de doc x, dd, c, etc « commandes ». Vous devez donc avoir raison, je suppose que jou ^Jsont également des commandes.
statox