En una terminal, uno no puede distinguir Ctrl+ Ay Ctrl+ Shift+ Aya que ambos emiten el mismo código clave, entonces puedo ver por qué Vim no puede hacerlo. Pero gVim, al ser una aplicación X, puede diferenciar Ctrl+ Ay Ctrl+ Shift+ A. ¿Hay alguna forma de mapear esas dos cosas de manera diferente?
Para empezar, me gustaría hacer algo como lo siguiente: Hacer que "pegar desde el portapapeles" funcione como la terminal de Gnome, manteniendo Ctrl+ Ven el modo visual.
:nmap <C-S-V> "+gP
vim
key-bindings
Kohsuke Kawaguchi
fuente
fuente
Respuestas:
Gvim no lo hace porque vim no puede hacerlo (en circunstancias normales). Lo siento, pero así es.
Sin embargo...
Algunos terminales (por ejemplo, xterm e iterm2) se pueden configurar para enviar una secuencia de escape arbitraria para cualquier combinación de teclas.
Por ejemplo, añada lo siguiente al
.Xresources
de xterm para enviar<Esc>[65;5u
a CtrlShiftA. Luego puede mapear eso en Vim a<C-S-a>
. (65 es el valor decimal Unicode para shift-ay 5 es el bit para el modificador ctrl. La u en este caso significa "unicode").iTerm y [u] rxvt también se pueden configurar para hacer esto (no se proporcionan ejemplos).
Más información: http://www.leonerd.org.uk/hacks/fixterms/
fuente
\n
. Use barra invertida para dividir líneas. Por ejemplo, para mapear también <kbd> CSB </kbd> y <kbd> CSF </kbd> use esto:XTerm*vt100.translations: #override Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") \n Ctrl ~Meta Shift <Key>b: string(0x1b) string("[66;5u") \n Ctrl ~Meta Shift <Key>f: string(0x1b) string("[70;5u")
map <ESC>[66;5u :echo "ctrl-shift-b received"<CR>
asignar ctrl-shift-b para imprimir un mensaje en la línea de estado. En AskUbuntu había una Q similar y he resumido esto.xterm-256color
(los más recientes) sufren de tantas limitaciones.xterm-256color
.Como ya se señaló, no hay formas de mapear de manera
<C-S-A>
diferente a<C-A>
.Sin embargo, al usar herramientas como
autokey
(para Linux y Windows) oautohotkey
(para Windows), puede reasignar<C-S-A>
para enviar una pulsación de tecla diferente para aplicaciones específicas.por ejemplo, en mi sistema, tengo esta configuración en
autokey
:Asígnele estas propiedades:
ctrl+shift+a
gnome-terminal-server.Gnome-terminal
Entonces
~/.vimrc
puedes crear mapas para<S-F1>a
hacer lo que quieras.Notas:
<S-F1>
como una especie de clave líder para la detección<C-S>
. Esto fue debido a mi terminal no aceptó<F13>
-<F37>
etc llaves. Si su aplicación lo admite, (gvim
creo que) se recomienda usar esas teclas.vim
engnome-terminal
. Entonces lo uséwindow class = gnome-terminal-server.Gnome-terminal
como filtro. Modifíquelo para usarlogvim
si lo desea.autokey
admite un botón para capturar las propiedades de cualquier otra ventana como clase / título.fuente
apt install autokey-gtk
?bindsym --release Control+Shift+h exec --no-startup-id xdotool key --clearmodifiers comma w m h
que presiona,wmh
cuando presiono<C-S-h>
, y luego vim sabe cómo manejar,wmh
<C-S-H>
cuando presione eso.Si lo que le molesta es perder la funcionalidad de CV existente, puede usar CQ en su lugar. Ver,: ayuda CTRL-V-alternativa.
fuente
NeoVim ahora ofrece esta funcionalidad tanto para su terminal como para sus clientes gui. Ver : h nvim-features-new
fuente
<m-s-...>
variantes) no trabajan sobre todo por completo fuera de la caja.ALT (|META|) chords always work (even in the |TUI|). Map |<M-| with any key: <M-1>, <M-BS>, <M-Del>, <M-Ins>, <M-/>, <M-\>, <M-Space>, <M-Enter>, etc. Case-sensitive: <M-a> and <M-A> are two different keycodes.
Hay un salto de línea antes de la parte "Sensible a mayúsculas y minúsculas:", lo que hace que esto sea ambiguo. Gracias por la corrección, @ JustinM.Keyes. Además, vim 8.1 parece diferenciar entre<M-a>
y<M-A>
también.<c-s-l>
se distingue perfectamente de<c-l>
adentroKonsole
sin ningún problema adicionalDebido a la forma en que la entrada del teclado se maneja internamente, desafortunadamente esto no es posible hoy en día, incluso en GVIM. Algunas combinaciones de teclas, como Ctrl+ no alfabético, no se pueden asignar y no se pueden distinguir Ctrl+ letra frente a Ctrl+ Shift+ letra. (A menos que su terminal envíe un código termcap distinto , que la mayoría no lo hace). En el modo de inserción o de línea de comandos, intente escribir la combinación de teclas. Si no pasa nada / no se inserta, no puede usar esa combinación de teclas. Esto también se aplica a
<Tab>
/<C-I>
,<CR>
/<C-M>
/<Esc>
/<C-[>
etc. (La única excepción es<BS>
/<C-H>
.) Este es un punto débil conocido y es objeto de varias discusiones sobre vim_dev y el canal de IRC #vim.Algunas personas (sobre todo Paul LeoNerd Evans) quieren arreglar eso (incluso para la consola Vim en terminales que lo admitan), y han presentado varias propuestas, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
Pero a partir de hoy, aún no se han presentado parches ni voluntarios, aunque muchos han expresado el deseo de tener esto en un futuro lanzamiento de Vim.
fuente
Como ha notado, obtiene el mismo código clave. Entonces, la única forma de distinguirlos es verificar el estado de la Shiftclave en su función de manejo de eventos. Por supuesto, si tiene más de 0,5 segundos de retraso entre la pulsación de tecla y el procesamiento, perderá algunos golpes.
fuente