Vi en alguna parte de la web a alguien que usaba Ctrl-J
y, 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
j
y<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?
cursor-movement
statox
fuente
fuente
Ctrl-J
enlace predeterminado ? Parece ser común, al menos entre los que conozco, asignarCtrl-J/K
a "abajo / arriba hasta la siguiente línea con el mismo nivel de sangría que la línea de inicio".<CR>
aquí"Respuestas:
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 llamadoLF
), 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^M
en los terminales Unix).<NL>
El código de control es CtrlJ.CtrlNMe sorprendió. Según 2 , es un cambio de personaje:
man ascii
El cambio de entrada y salida de caracteres, de acuerdo con Wikipedia :
Cómo terminó significando bajar es un misterio para mí.
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.
fuente
Ctrl-N
era para el siguiente yCtrl-P
para el anterior . Eso es lo que representan en Emacs, de todos modos, en lo que están obligadosnext-line
yprevious-line
. Además,Ctrl-P
no es cambio en ; Es un escape de enlace de datos . Cambiar en esCtrl-O
.Ver
:help key-notation
.<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-j
yctrl-m
) pero por lo general se insertan con la misma clave,<CR>
. Estoy de acuerdo en que usarlo<NL>
en este contexto parece contradictorio.Todas esas "asignaciones" (en realidad no son asignaciones) se comportan exactamente de la misma manera.
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
hjkl
teclas. 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.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.fuente
<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.:ls
,:substitute
,new
, etc ...?x
También es un "comando".x
,dd
,c
, etc "comandos". Entonces debes estar en lo cierto, supongo quej
o^J
también son comandos.