vim - nnoremap - ¿Pueden los terminales detectar<Shift-Enter> o<Control-Enter>?
vim map (2)
¿Es posible que el terminal detecte las pulsaciones de tecla ⇧ Shift + Enter↵ o Ctrl + Enter↵ ?
Estoy tratando de configurar vim para hacer asignaciones de teclas que usen estas secuencias, y aunque funcionan bien en gvim, no parecen funcionar en ninguna consola de terminal.
Lo curioso es que aunque Ctrl + Enter↵ no se detecta en vim, mapear Enter↵ a Esc se correlaciona correctamente, pero luego presionar Ctrl + Enter↵ se comporta como Enter↵ !
Gvim ejecuta su propio administrador para el manejo de pulsaciones de teclas y puede recoger todas las combinaciones de teclas diferentes. Vim depende del terminal específico para transmitir la pulsación de tecla particular, por lo que el manejo de tecla solo es tan bueno o variado como el terminal.
Una forma de averiguar si puede hacer lo que quiere hacer es utilizar la clave para averiguar qué se inserta. por ejemplo, Tipo:
:<C-V><C-Enter>
es decir, ingrese la combinación que desea presionar después de haber escrito la combinación Control-V. Después de eso, haz lo mismo para entrar, es decir,
:<C-V><Enter>
Si producen el mismo código, entonces el terminal interpreta ambas combinaciones de teclas como el mismo código clave, y no puede unirlas sin interferir con el terminal.
En mi terminal (urxvt), Control-Enter, Shift-Enter e Intro (solo) producen el caracter ^ M, lo que significa que no puedo mapear uno sin mapear el otro. Lo mismo vale para Control-Tab y Control-I, y Control-Espacio y Control- @
EDITAR: Usa CQ en lugar de CV para Windows.
Algunos terminales envían <NL>
cuando se presiona <C-Enter>
. Esto es equivalente a enviar <CJ>
.
Para saber qué hace su terminal con <Shift-Enter>
, <Ctrl-Enter>
y <Enter>
, vaya a su terminal, escriba <Ctrl-V>
(similar a la sugerencia de sykora para vim) y escriba la secuencia que Estoy interesado en.
Usando gnome-terminal, obtengo lo siguiente:
<Enter> : ^M
<S-Enter> : ^M
<C-Enter> : <NL>
Observar al man ascii
indica que ^M
da la secuencia <CR>
.
La respuesta es que depende de la terminal, y hay una manera fácil de verificar.