2010-02-15 25 views

Respuesta

7

Si quería hacer un mapa de, por ejemplo, Ctrl-E, que sería algo así como:

inoremap <C-E> <C-N> 

El problema con Ctrl - espacio es que la mayoría de los terminales se acaba de verlo como un espacio Asumiré que estás usando algún programa de terminal dentro de X; si usa algo diferente, deberá proporcionar las sustituciones pertinentes usted mismo.

readline de Bash tiene normalmente Ctrl - V asignada a "tratar a la siguiente tecla tan literal." Así que presionando Ctrl - V luego Inicio en una línea de comando bash insertará ^[[H o algo así en la línea de comandos, en lugar de ir al comienzo de la línea. Pruebe a pulsar Ctrl - V continuación Ctrl - espacio. Probablemente solo verá un espacio.

En ese caso, tendrá que engañar con xmodmap o escribir sus propios/X11/xkb/archivos */usr/share para contar X a la salida algo diferente cuando se pulsa Ctrl - espacio. A los programas como Firefox no les importa; detectan qué tecla de base se está presionando y descubren por sí mismos qué modificadores se están presionando. Pero la mayoría de los programas basados ​​en terminales sólo verán Ctrl - espacio como un espacio a menos que se diga X para tratar el espacio y Ctrl - espacio diferente.

Dudo que pueda hacer este cambio con xmodmap solo; probablemente necesites hacer el hacking de nivel inferior/usr/share/X11/xkb/*. Esto es complicado, y ni siquiera sé si estás usando X en primer lugar, así que lo dejaré allí.

Algunos terminales como urxvt le permiten especificar sus propios enlaces de teclas. Al igual que Firefox, pueden decir cuándo es un Espacio y cuándo un Espacio de Control incluso sin que hagas nada especial para configurar X. Así que podrías decirle a urxvt que emita "\ 033I_TYPED_CONTROL_SPACE_DAMMIT" cuando presiones Ctrl - Espacio. Y luego podría decirle a vim que asigne que a <C-N>.

EDITAR: Olvidé que Ctrl-Space solía dar salida a \0 (lo reasigné en otro lugar en mi teclado). En ese caso, toda la complejidad que describí arriba es innecesaria. Lo que dije se aplicaría a alguien que quisiera utilizar un mapeo más exótico, como Ctrl-colon o Alt - Espacio.

+1

Sin embargo, es bueno que alguien se haya esforzado por describir qué está sucediendo aquí. Las otras respuestas carecen de una descripción de por qué funcionan sus soluciones :-) – JepZ

18

Me gusta el mapeo Ctrl + Space también.

" Remap code completion to Ctrl+Space {{{2 
inoremap <Nul> <C-x><C-o>

En el caso de que quiera:

inoremap <Nul> <C-n>
+7

Si está en gvim, querrá en lugar de . – tghw

+0

'<[email protected]>' se utiliza para C-Space en algunos terminales (PuTTY, creo), supongo que es idéntico a C- @ –

29
if has("gui_running") 
    " C-Space seems to work under gVim on both Linux and win32 
    inoremap <C-Space> <C-n> 
else " no gui 
    if has("unix") 
    inoremap <Nul> <C-n> 
    else 
    " I have no idea of the name of Ctrl-Space elsewhere 
    endif 
endif 
+3

Nota: es posible que tenga que usar 'has (" gui_running ")', como ' ("gui") 'simplemente regresa si tu vim está compilado con la opción' gui', no es que lo estés usando ahora mismo. – Dogbert

+0

No está conectado directamente a Unix. '' se traduce a ' 'por el emulador de terminal, por lo que si encuentra un emulador de terminal que haga el mismo trabajo en Windows, también funcionará. Y '' es ** no ** un * nombre * de '' en cualquier parte, por la misma razón ' [B' no es un nombre de' ', es solo un símbolo producido por el terminal cuando presiona' '. – ZyX

Cuestiones relacionadas