Qual è la differenza tra j, CTRL-J, <NL> e CTRL-N in modalità normale?


12

Ho visto da qualche parte sul web qualcuno che utilizzava Ctrl-Je poiché non conoscevo questa mappatura ho cercato nel documento pertinente e ho trovato quanto segue:

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

Il che mi porta a diverse domande:

  • Che cosa è<NL> : lo vedrei come un equivalente di <CR>poiché la pressione Enterscenderà di una riga in modalità normale per impostazione predefinita, ma perché è <NL>qui e non <CR>?
  • Qual è la differenza tra questi mapping : tutte queste 5 opzioni scendono di una riga allo stesso modo? Secondo i miei test risponderei di sì ma ciò porterebbe alla mia prossima domanda.
  • Perché ci sono 5 mapping per fare esattamente la stessa cosa : posso capirlo je <down>sono conservati per gli utenti che non sono abituati a vim mapping, ma perché esistono gli altri mapping?
  • Quando è più interessante usarne uno più dell'altro : questa è una continuazione della domanda precedente: se ci sono così tante possibilità immagino che abbiano diversi vantaggi o che siano meglio usare in casi d'uso specifici. Quali sono questi casi d'uso?

Trovo la ridondanza di questi comandi ancora più strano quando guardo :h k: ci sono solo 3 modi per andare su: k, <UP>e ctrl-p. Quindi la domanda bonus è: perché ci sono 5 modi per scendere e solo 3 per salire?


Sei sicuro che stessero usando l' Ctrl-Jassociazione predefinita ? Sembra essere comune, almeno tra quelli che conosco, mappare Ctrl-J/Ksu "giù / su fino alla riga successiva con lo stesso livello di rientro della linea di partenza".
Aaron Dufour,

4
Vorrei rispondere a "Perché ci sono 5 modi per scendere e solo 3 per salire?" Beh, è ​​perché nella vita le cose vanno molto più a sud ! :)
VanLaser

@VanLaser risposta davvero eccezionale, dovrebbero prendere in considerazione l'aggiunta di questo suggerimento nel documento! ;-)
statox

@VanLaser Peccato non è vero. A quel ritmo tutta l'umanità scenderà nel nulla in pochissimo tempo!
xji,

"Abbandona la speranza, tutti voi che siete <CR>qui"
VanLaser,

Risposte:


15

Interessante che hai menzionato <CR>. <CR>o ritorno a capo, tecnicamente utilizzato per indicare andare all'inizio della riga . <NL>, o newline aka feed di riga (di solito chiamato LF), era usato per significare passare alla riga successiva . Nel tempo, la distinzione è andata perduta nella maggior parte delle applicazioni. 1 Premendo in Enterrealtà si ottiene un ritorno a capo, di solito (provare a premere CtrlVEnter- si dovrebbe vedere ^Mnei terminali Unix). <NL>il codice di controllo è CtrlJ.

CtrlNmi ha sorpreso. Secondo 2 , è un personaggio fuori turno :man ascii

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

Lo spostamento e lo spostamento dei personaggi, secondo Wikipedia :

... fornito un modo per spostare, quindi la nomenclatura, un nastro colorato, diviso longitudinalmente di solito con rosso e nero, su e giù per l'altro colore in una macchina da scrivere elettromeccanica o in una teleprinter ...

Come è finito, significa che andare giù è un mistero per me.


Perché ci sono 5 modi per scendere e solo 3 per salire?

Bene, i tre modi per salire hanno tutti i modi corrispondenti per scendere. ( CtrlPpresumibilmente è il complemento di CtrlN, il che implica che lo spostamento in / out non è rilevante qui). I due modi in più in basso ( <NL>o CtrlJ) sono in realtà due rappresentazioni allo stesso modo. <NL>è un'eredità dai tempi della macchina da scrivere - e in quei giorni, non penso che ci fosse una chiave per salire - solo per scendere.

Guarda anche:

1 In alcuni casi è ancora importante (la stampa \r(ritorno a capo) e \n(avanzamento riga) utilizzando la maggior parte delle funzioni / strumenti di stampa formattati mantengono ancora il vecchio significato.).

2 Questa tabella è organizzata in modo tale che l'alfabeto corrisponda al codice di controllo del carattere sulla stessa riga.


3
Ho sempre pensato che Ctrl-Nfosse per il prossimo , ed Ctrl-Pera per il precedente . Questo è ciò che rappresentano in Emacs, comunque, in cui sono legati next-linee previous-line. Inoltre, Ctrl-Pnon si sposta in ; è fuga dal collegamento dati . Shift in è Ctrl-O.
Lithis,

@Lithis sto corretto.
Muru,

2
@Lithis Onestamente, l'unica cosa che so di Emacs è cx ce.
Muru,

Risposta chiara e storica, grazie mille Muru! Avrei dovuto pensare al codice ASCII dei personaggi in cui spesso si trova la risposta.
statox

@muru È un peccato perché Emacs ha davvero molto da offrire, specialmente la sua modalità org che mi è stata di grande aiuto. Ti consiglio di dare un'occhiata al progetto Spacemacs github.com/syl20bnr/spacemacs , che si concentra fortemente sull'emulazione Vim in modo che non sia necessario conoscere alcun comando Emacs tradizionale da utilizzare. Forse questo cambierà un po 'la tua percezione.
xji,

8

Vedere :help key-notation.

  1. <NL>significa "avanzamento riga" e <CR>significa "ritorno a capo ".

    Sono due modi diversi per interrompere la linea corrente. Essi sono storicamente legati a diversi caratteri di controllo ( ctrl-je ctrl-m), ma sono generalmente inseriti con la stessa chiave, <CR>. Concordo sul fatto che l'utilizzo <NL>in questo contesto sembra controintuitivo.

  2. Tutti quei "mapping" (in realtà non sono mapping) si comportano esattamente allo stesso modo.

  3. La storia, per lo più, anche vincoli multipiattaforma.

    Non c'erano tasti di movimento dedicati Terminale di Bill Joy, ma i tasti delle frecce erano sui hjkltasti. Dato che al momento gli editor modali erano rari, premendo quei tasti si inseriva solo il carattere associato in qualunque cosa si stesse facendo. Si doveva premere <C-h>, <C-j>, <C-k>e <C-l>per spostare il cursore sullo schermo.

    Come si può vedere, c'è piuttosto una sovrapposizione tra j, <C-j>, <NL>e <Down>. <C-n>generalmente significa "prossimo" in Vim, è facile vedere come è stato raggruppato insieme ai suoi compagni.

  4. Dal momento che sono tutti sinonimi, sei libero di usare quello che funziona meglio per te.

    <CR>, ad esempio, è una chiave interessante da utilizzare per le proprie mappature.


Grazie per l'illuminazione! Sono molto d'accordo sulla <CR>mappatura. Ancora un'altra domanda: so che quelle "combinazioni di tasti" in realtà non sono chiamate mappature ma non sono sicuro di come dovrei chiamarle?
statox

Questa è una domanda interessante, tendo a chiamarli "comandi".
romainl,

Posso sbagliarmi, ma non è "comando" riferendosi alla ex comandi della modalità piace :ls, :substitute, new, ecc ...?
statox

xè anche un "comando".
romainl,

Infatti ho appena visto che le chiamate doc x, dd, c, ecc "comandi". Quindi devi avere ragione, immagino che jo ^Jsiano anche comandi.
statox
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.