2012-04-29 30 views
6

¿Hay alguna manera de obtener un modo similar al xev donde puedo presionar teclas y combinaciones de teclas y vim imprimirá qué teclas o caracteres cree que estoy presionando?¿Cómo puedo ver qué teclas cree vim?

Problema relacionado específico: Tengo enlaces de teclas que funcionan en MacVim y GVim pero no funcionan en un terminal-vim, que utilizo en Linux sobre SSH dentro de una pantalla. Llegué a la conclusión de que la razón es porque vim piensa que las teclas que estoy presionando son diferentes de cómo las interpreta MacVim.

En mi .vimrc:

map <M-,> :split<CR> " Horizontal split 
map <M-.> :vsplit<CR> " Vertical split 
map <M-/> :close<CR> 

En la :map (MacVim muestra la misma) mi vim:

¯    :close<CR><Space> 
®    :vsplit<CR> " Vertical split 
¬    :split<CR> " Horizontal split 

Funciona en MacVim y GVim, pero no funciona en cualquier Terminal- basado vim. Lo he intentado en múltiples terminales (Terminal OSX y Term2, Terminal KDE, Terminal Gnome, etc.). También he sido testigo de esto con otros modificadores y combinaciones de teclas. Parece que vim está capturando las pulsaciones de teclas, pero las está interpretando como algo distinto de <M-,>, por ejemplo.

Me encantaría tener una forma de averiguar qué vim piensa que estoy presionando para poder escribir las asignaciones en consecuencia.

Respuesta

6
  1. i para cambiar al modo de inserción.
  2. <C-v>.
  3. <key> o combo.
  4. Vim imprime el valor "en bruto" de la tecla/combo que ha presionado.

Aquí (terminal de Gnome en Ubuntu 11.04), tecleando i<C-v>, seguido de <Alt>, seguido de , impresiones de algo que se parece ^[, que significa "escapar". La clave Alt (que creo que es lo que desea usar para <Meta>) no se reconoce como <Meta> ni como <Alt>.

La conclusión inmediata es que a CLI Vim no le gusta <M-> (y muchos emuladores de terminal no se ocupan muy bien de todos modos). Algunos emuladores de terminal le permiten asignar la clave <Alt> al Meta pero no es una solución perfecta multiplataforma (uso <Alt> mucho en Mac OS X para ingresar caracteres especiales).

En esta máquina,

nnoremap ^[, :split<CR> " ^[ is <C-v><Esc> 

hace exactamente lo que pienso que deseas, sin embargo.

Si desea continuar utilizando los accesos directos <M-> tanto en la GUI como en la CLI, deberá mantener dos conjuntos de accesos directos por separado. Si tiene docenas de asignaciones personalizadas en su .vimrc, se volverá un poco difícil de administrar.

Es por eso que creo que debería usar asignaciones que funcionan por todas partes como:

:nnoremap <leader>, :split<CR> 
:nnoremap <leader>. :vsplit<CR> 
:nnoremap <leader>/ :close<CR> 

La clave por defecto es <leader>\ pero me he fijado a ,.

Tenga en cuenta que no es necesario utilizar <leader>key, simplemente en un mapa ,,, ,. y ,/ obras, también.

Ver :help <leader>.

+0

¿Eso significa que mapear ''^[, '' para decir '': vsplit '' debería permitir que '' '' funcione en CLI Vim? No he podido hacer ese trabajo tampoco. Además, ¿está implicando que las teclas modificadoras en general no se comportan bien en CLI Vim? ¿Debo seguir las pulsaciones de teclas individuales? – shazow

+0

Ver mi respuesta, no es un literal '^ [' ('^' seguido de '['), es un solo caracter que se parece a '^ ['. Puede obtenerlo presionando ''. – romainl

+0

He editado mi respuesta para obtener más precisión. No se garantiza que las teclas modificadoras funcionen en CLI Vim: muchos combos '' ya tienen algún significado y no se pueden usar '' y '' juntos. Así que sí, mi consejo es que olvides las teclas modificadoras ** ambas ** en CLI Vim * y * en GUI Vim. Mis asignaciones '' funcionan en todas partes y no tengo que mantener dos conjuntos de asignaciones en mi memoria. – romainl

Cuestiones relacionadas