online metrologia mac for vim

metrologia - vim online



¿Cómo asignar Ctrl+A y Ctrl+Shift+A de manera diferente? (6)

En un terminal, uno no puede distinguir Ctrl + A y Ctrl + Shift + A ya que ambos emiten el mismo código de tecla, por lo que puedo ver por qué Vim no puede hacerlo. Pero gVim, al ser una aplicación X, puede diferenciar Ctrl + A y Ctrl + Shift + A. ¿Hay alguna manera 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 terminal Gnome, mientras mantiene Ctrl + V en el modo visual.

:nmap <C-S-V> "+gP


Como habrás notado, obtienes el mismo código clave. Entonces la única forma de distinguirlos es verificar el estado de la tecla Shift 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 hits.


Como ya se señaló, no hay formas de mapear <CSA> diferente a <CA> .

Sin embargo, usando herramientas como autokey (para Linux y Windows) o autohotkey (para Windows), puede autohotkey <CSA> para enviar un golpe de tecla diferente para aplicaciones específicas.

Por ejemplo, en mi sistema, tengo esta configuración en autokey :

$ cat ~/.config/autokey/data/gnome-terminal/ctrlshifta-gnome-terminal.py #ctrl+shift+a sends ''<S-F1>a'' keyboard.send_keys("<shift>+<f1>a") # Note that `f` in `f1` needs to be in lower case.

Asignarle estas propiedades:

  1. atajo de teclado como ctrl+shift+a
  2. clase de ventana: gnome-terminal-server.Gnome-terminal

Entonces su ~/.vimrc puede crear una asignación para <S-F1>a para hacer lo que quiera.

Notas:

  1. He usado <S-F1> como tipo de clave de líder para detectar <CS> . Esto fue porque mi terminal no aceptaba las teclas <F13> - <F37> etc. Si su aplicación lo admite, (creo que gvim ) es recomendable usar esas claves.
  2. Principalmente vim en gnome-terminal . Entonces usé window class = gnome-terminal-server.Gnome-terminal como filtro. Modifíquelo para usar gvim si lo desea. autokey admite un botón para capturar las propiedades de cualquier otra ventana como clase / título.

Debido a la forma en que se maneja la entrada del teclado internamente, lamentablemente no es posible en la actualidad, incluso en GVIM. Algunas combinaciones de teclas, como Ctrl + no alfabético no se pueden asignar, y Ctrl + letra vs. Ctrl + Mayús + letra no se pueden distinguir. (A menos que su terminal envíe un código de termcap distinto, que la mayoría no). En el modo de inserción o línea de comando, intente escribir la combinación de teclas. Si no ocurre nada / está insertado, no puede usar esa combinación de teclas. Esto también se aplica a <Tab> / <CI> , <CR> / <CM> / <Esc> / <C-[> etc. (La única excepción es <BS> / <CH> .) Este es un punto de dolor conocido y el tema de varias discusiones sobre vim_dev y el canal de IRC #vim.

Algunas personas (principalmente Paul LeoNerd Evans) quieren arreglar eso (incluso para la consola Vim en terminales que lo soportan), y han lanzado varias propuestas, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Pero a partir de hoy, todavía no se han presentado parches o voluntarios, aunque muchos han expresado su deseo de tener esto en una versión futura de Vim.


Gvim no lo hace porque vim no puede hacerlo (en circunstancias normales). Lo siento, pero así es como 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, agregue lo siguiente a .Xresources para que xterm envíe <Esc>[65;5u para Ctrl Shift A. Puede asignar eso en Vim a <CSa> . (65 es el valor decimal Unicode para shift-a y 5 es el bit para el modificador ctrl. El u en este caso significa "unicode").

! .Xresources XTerm*vt100.translations: #override Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u")

iTerm y [u] rxvt también pueden configurarse para hacer esto (ejemplos no proporcionados).

Más información: http://www.leonerd.org.uk/hacks/fixterms/


NeoVim ahora ofrece esta funcionalidad tanto para su terminal como para los clientes de GUI. Ver : h nvim-features-new


Si lo que le molesta es perder la funcionalidad CV existente, puede usar CQ en su lugar. Ver,: ayuda CTRL-V-alternativa.