Cómo mapear la tecla CAPS LOCK en VIM?
capslock (10)
Estoy usando GVIM en Windows. Y quiere mapear CAPSLOCK a Ctrl + ^
Alguna forma de hacer esto?
Por cierto, veo toneladas de muestras en la web sobre cómo intercambiar CAPS y Esc usando hack de registro, pero ninguna de ellas usa el comando de mapa VIM, en su lugar herramientas externas y cambios de registro.
Solución que no rompe Caps Lock
fuera de vim
Windows
- Instala autohotkey.
- Ejecute la secuencia de comandos autohotkey:
`` `
;caps_to_esc.ahk
#IfWinActive, ahk_class Vim ; vim window class
Capslock::Esc
#IfWinActive
`` `
Linux
-
sudo apt-get install xdotool xbindkeys python
. También usaremosxprop
ycut
. - Cree un script
~/caps_to_esc.sh
:
`` `
#!/bin/bash
capsOff () {
python -c ''/
from ctypes import *; /
X11 = cdll.LoadLibrary("libX11.so.6"); /
display = X11.XOpenDisplay(None); /
X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2), c_uint(0)); /
X11.XCloseDisplay(display) /
''
}
declare -a wm_classes=( /
''WM_CLASS(STRING) = "gnome-terminal-server", "Gnome-terminal"'' /
''WM_CLASS(STRING) = "gvim", "Gvim"'' /
''WM_CLASS(STRING) = "code", "Code"'' /
''WM_CLASS(STRING) = "google-chrome", "Google-chrome"'' /
)
active_window_id=$(xprop -root _NET_ACTIVE_WINDOW | cut -f2 -d#)
active_window_wm_class=$(xprop -id $active_window_id WM_CLASS)
for wm_class in "${wm_classes[@]}"; do
# echo "$wm_class" >> xbindkeys.debug
if [ "$active_window_wm_class" == "$wm_class" ]; then
# echo true >> xbindkeys.debug
xdotool getactivewindow key Escape
capsOff
fi
done
`` `
-
sudo chmod +x ~/caps_to_esc.sh
Agregue un nuevo bindnig a
~/.xbindkeysrc
:"~/caps_to_esc.sh" Caps_Lock
xbindkeys
(si ya has iniciadoxbindkes
, mátalo primero conkillall xbindkeys
).
Capslock (y Control, y Shift, etc.) es una tecla modificadora, lo que significa que se usa con otra tecla normal para modificar el significado de esa tecla. AFAIK el sistema operativo no pasa las teclas modificadoras a la aplicación a menos que también se haya presionado una tecla normal, por ejemplo, presionar CTRL
no será visto por la aplicación, pero sí CTRL-C
.
Dado que hay una solución para Linux y Windows (Autohotkey), me gustaría sugerir utilizar pckeyboardhack para Mac para reasignar CapsLock en todas partes.
Debajo de ventanas? Use AutoHotkey . No es un mapeo vim, pero como los otros han declarado que no puedes mapearlo. Uso AHK para mapear mi CAPSLOCK a CTRL.
En sistemas Linux, esto se puede hacer con xmodmap.
Guarde esto en un archivo de texto en la carpeta de inicio
! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock
Guarde este archivo con un nombre como .capstoescswitc
Luego ejecuta este archivo a través del terminal.
xmodmap ~/.capstoescswitc
Si quiere reverenciarlo, simplemente cambie las variables clave en el archivo de script.
Para más información, consulte esta page
Linux? Con X, utilice xmodmap para alterar la asignación de teclas, por ejemplo
xmodmap -e ''clear Lock'' -e ''keycode 0x42 = Escape''
Asignará Esc a la tecla Bloq Mayús. Google para más ejemplos.
No creo que puedas. Creo que CAPS-LOCK probablemente se traduce por el SO antes de que vim lo vea. Entonces, necesitarías hacer un hack en el nivel del sistema operativo, como los hacks de registro que ya has visto.
EDIT: autohotkey parece que podría usarse para salvar la brecha de vim-OS . De esta forma, una aplicación de terceros está haciendo los hack en el nivel del sistema operativo, y solo estás enganchando esa aplicación.
Para Mac OS, puede reasignar el sistema de claves ''mayúsculas y minúsculas'' en ''preferencias del sistema''.
Sigue este camino:
preferencias del sistema> teclado> teclas modificadoras
A continuación, haga clic en el cuadro desplegable al lado de ''Bloq Mayús'' y elija ''^ Control''.
Si su intención es solo evitar trabajar fuera de Vim, puede poner estas líneas en su .vimrc:
au VimEnter * !xmodmap -e ''clear Lock'' -e ''keycode 0x42 = Escape''
au VimLeave * !xmodmap -e ''clear Lock'' -e ''keycode 0x42 = Caps_Lock''
Los primeros mapas de línea escapan a la tecla de bloqueo de mayúsculas cuando ingresa Vim, y la segunda línea devuelve la funcionalidad normal al bloqueo de mayúsculas cuando se cierra.
Esto requiere Linux con el paquete xorg-xmodmap instalado.
Supongo que una de las razones para hacer esto es crear un bloqueo suave de mayúsculas, como han mencionado otros, posiblemente para evitar mantener el bloqueo de mayúsculas en modo normal. He utilizado el complemento vimcaps para desactivar el bloqueo de mayúsculas al salir del modo de inserción, parece funcionar bien.