map vim capslock

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

  1. Instala autohotkey.
  2. Ejecute la secuencia de comandos autohotkey:

`` `

;caps_to_esc.ahk #IfWinActive, ahk_class Vim ; vim window class Capslock::Esc #IfWinActive

`` `

Linux

  1. sudo apt-get install xdotool xbindkeys python . También usaremos xprop y cut .
  2. 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

`` `

  1. sudo chmod +x ~/caps_to_esc.sh
  2. Agregue un nuevo bindnig a ~/.xbindkeysrc :

    "~/caps_to_esc.sh" Caps_Lock

  3. xbindkeys (si ya has iniciado xbindkes , mátalo primero con killall 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.