¿Cuál es la diferencia entre j, CTRL-J, <NL> y CTRL-N en modo normal?


12

Vi en alguna parte de la web a alguien que usaba Ctrl-Jy, como no conocía esta asignación, busqué en el documento relevante y encontré lo siguiente:

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

Lo que me lleva a varias preguntas:

  • Qué es<NL> : lo vería como un equivalente de <CR>ya que presionar Enterbajará una línea en modo normal de forma predeterminada, pero ¿por qué está <NL>aquí y no <CR>?
  • ¿Cuál es la diferencia entre estas asignaciones ? ¿Todas estas 5 opciones van una línea hacia abajo de la misma manera? Según mis pruebas, respondería que sí, pero eso me llevaría a mi siguiente pregunta.
  • ¿Por qué hay 5 asignaciones para hacer exactamente lo mismo ? Puedo entender eso jy <down>se guardan para los usuarios que no están acostumbrados a las asignaciones de vim, pero ¿por qué existen las otras asignaciones?
  • ¿Cuándo es más interesante usar uno más que el otro ? Esa es una continuación de la pregunta anterior: si hay tantas posibilidades, supongo que tienen diferentes ventajas o son mejores para usar en casos de uso específicos. ¿Cuáles son esos casos de uso?

Encuentro la redundancia de estos comandos aún más extraña cuando miro :h k: sólo hay 3 opciones para subir al: k, <UP>y ctrl-p. Entonces, la pregunta adicional es: ¿Por qué hay 5 formas de bajar y solo 3 para subir?


¿Estás seguro de que estaban usando el Ctrl-Jenlace predeterminado ? Parece ser común, al menos entre los que conozco, asignar Ctrl-J/Ka "abajo / arriba hasta la siguiente línea con el mismo nivel de sangría que la línea de inicio".
Aaron Dufour

44
Me gustaría responder a "¿Por qué hay 5 formas de bajar y solo 3 para subir?" Bueno, ¡es porque, en la vida, las cosas van mucho más fáciles! :)
VanLaser

@VanLaser realmente buena respuesta, deberían considerar agregar esta pista en el documento! ;-)
statox

@VanLaser Lástima que no lo sea. ¡A ese ritmo, toda la humanidad descenderá a la nada en muy poco tiempo!
xji

"Abandona la esperanza, todos los que están <CR>aquí"
VanLaser

Respuestas:


15

Interesante que hayas mencionado <CR>. <CR>o retorno de carro, técnicamente usado para significar ir al inicio de la línea . <NL>, o el salto de línea también conocido como newline (generalmente llamado LF), se usó para indicar ir a la siguiente línea . Con el tiempo, la distinción se perdió en la mayoría de las aplicaciones. 1 Al presionar Enterrealmente se obtiene un retorno de carro, por lo general (intente presionar CtrlVEnter, debería ver ^Men los terminales Unix). <NL>El código de control es CtrlJ.

CtrlNMe sorprendió. Según 2 , es un cambio de personaje:man ascii

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

El cambio de entrada y salida de caracteres, de acuerdo con Wikipedia :

... proporcionó una forma de cambiar, de ahí la nomenclatura, una cinta de color, dividida longitudinalmente generalmente con rojo y negro, hacia arriba y hacia abajo al otro color en una máquina de escribir electromecánica o teleimpresora ...

Cómo terminó significando bajar es un misterio para mí.


¿Por qué hay 5 formas de bajar y solo 3 para subir?

Bueno, las tres formas de subir tienen formas correspondientes de bajar. ( CtrlPpresumiblemente es el complemento de CtrlN, lo que implica que el cambio de entrada / salida no es relevante aquí). Las dos vías adicionales hacia abajo ( <NL>o CtrlJ) son en realidad dos representaciones de la misma manera. <NL>es una herencia de los días de la máquina de escribir, y en esos días, no creo que haya una clave para subir, solo para bajar.

Ver también:

1 Todavía es importante en algunos casos (la impresión \r(retorno de carro) y \n(avance de línea) utilizando la mayoría de las funciones / herramientas de impresión formateadas aún conservan el significado anterior).

2 Esta tabla está organizada de tal manera que el alfabeto corresponde al código de control del carácter en la misma línea.


3
Siempre pensé que Ctrl-Nera para el siguiente y Ctrl-Ppara el anterior . Eso es lo que representan en Emacs, de todos modos, en lo que están obligados next-liney previous-line. Además, Ctrl-Pno es cambio en ; Es un escape de enlace de datos . Cambiar en es Ctrl-O.
Lithis

@Lithis estoy corregido.
muru

2
@Lithis Sinceramente, lo único que sé sobre Emacs es cx ce.
muru

Respuesta histórica y clara, muchas gracias Muru! Debería haber pensado en el código ASCII de los personajes, la respuesta a menudo se encuentra allí.
statox

@muru Eso es una lástima ya que Emacs realmente tiene mucho que ofrecer, especialmente su modo de organización que me ha sido de gran ayuda. Le recomiendo que consulte el proyecto Spacemacs github.com/syl20bnr/spacemacs , que se centra principalmente en la emulación Vim para que no necesite conocer ningún comando tradicional de Emacs para usar. Tal vez eso cambie un poco tu percepción.
xji

8

Ver :help key-notation.

  1. <NL>significa "salto de línea" y <CR>significa "retorno de carro".

    Esas son dos formas diferentes de romper la línea actual. Que históricamente están ligados a los diferentes caracteres de control ( ctrl-jy ctrl-m) pero por lo general se insertan con la misma clave, <CR>. Estoy de acuerdo en que usarlo <NL>en este contexto parece contradictorio.

  2. Todas esas "asignaciones" (en realidad no son asignaciones) se comportan exactamente de la misma manera.

  3. La historia, en su mayoría, también tiene restricciones multiplataforma.

    No había teclas de movimiento dedicadas al terminal de Bill Joy, pero las calcomanías de las flechas estaban en las hjklteclas. Como los editores modales eran raros en ese momento, al presionar esas teclas solo se insertaba el carácter asociado en lo que sea que estuviera haciendo. Había que presione <C-h>, <C-j>, <C-k>y <C-l>para mover el cursor en la pantalla.

    Como se puede ver, hay toda una superposición entre j, <C-j>, <NL>y <Down>. <C-n>que generalmente significa "siguiente" en Vim, es fácil ver cómo fue agrupado junto con sus camaradas.

  4. Como todos son sinónimos, puede utilizar el que mejor le funcione.

    <CR>, por ejemplo, es una clave interesante para usar en sus propias asignaciones.


Gracias por la iluminación! Estoy muy de acuerdo con el <CR>mapeo. También una pregunta más: sé que esas "combinaciones de teclas" en realidad no se llaman asignaciones, pero no estoy seguro de cómo debo llamarlas.
statox

Esa es una pregunta interesante, tiendo a llamarlos "comandos".
romainl

Puedo estar equivocado, pero no es "comando", en referencia a la ex comandos del modo como :ls, :substitute, new, etc ...?
statox

xTambién es un "comando".
romainl

De hecho acabo de ver que las llamadas doc x, dd, c, etc "comandos". Entonces debes estar en lo cierto, supongo que jo ^Jtambién son comandos.
statox
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.