web-dev-qa-db-de.com

Wie kann ich den CAPS LOCK-Schlüssel in VIM zuordnen?

Ich verwende GVIM unter Windows. Und möchte CAPSLOCK Strg + ^ zuordnen

Irgendwie kann ich das tun?

Übrigens, ich sehe tonnenweise Beispiele über das Web, wie man CAPS und Esc mit Registry-Hack austauscht, aber keines davon verwendet den VIM - Map-Befehl, stattdessen externe Tools und Registry-Änderungen.

48
Evgenyt

Linux? Verwenden Sie bei X xmodmap, um die Schlüsselzuordnung zu ändern, z.

xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'

Ordnet Esc der Feststelltaste zu. Google für mehr Beispiele.

55
Dan Andreatta

Wenn Sie nur außerhalb von Vim arbeiten möchten, können Sie diese Zeilen in Ihre .vimrc einfügen:

au VimEnter * !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
au VimLeave * !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock'

In der ersten Zeile wird bei der Eingabe von Vim eine Flucht in die Feststelltaste gespeichert, und in der zweiten Zeile wird beim Beenden die normale Funktion wieder auf die Feststelltaste gesetzt. 

Dies erfordert Linux mit dem installierten Paket xorg-xmodmap.

22
rsoren

Unter fenstern? Verwenden Sie AutoHotkey . Es ist kein Vim-Mapping, aber wie die anderen bereits festgestellt haben, können Sie es nicht abbilden. Ich verwende AHK, um mein CAPSLOCK der CTRL zuzuordnen.

16
hometoast

Unter Mac OS können Sie die Feststelltaste systemweit in den Systemeinstellungen neu zuordnen.

Folge diesem Pfad:

systemeinstellungen> Tastatur> Zusatztasten

Klicken Sie dann auf das Dropdown-Feld neben "Feststelltaste" und wählen Sie "^ Control".

10

Capslock (und Control, Shift usw.) ist ein Zusatzschlüssel, dh er wird mit einem anderen normalen Schlüssel verwendet, um die Bedeutung dieses Schlüssels zu ändern. AFAIK das OS gibt die Modifikationstasten nicht an die Anwendung weiter, es sei denn, es wurde auch eine normale Taste gedrückt, z. Durch Drücken von CTRL wird die Anwendung nicht angezeigt, CTRL-C jedoch.

10
liwp

In Linux-Systemen kann dies mit xmodmap erfolgen.

Speichern Sie dies in einer Textdatei im Basisordner

! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

Speichern Sie diese Datei unter einem Namen wie .capstoescswitc

Dann führen Sie diese Datei über das Terminal aus.

xmodmap ~/.capstoescswitc 

Wenn Sie dies respektieren möchten, wechseln Sie einfach die Schlüsselvariablen in der Skriptdatei.

Weitere Informationen finden Sie auf dieser Seite

9

Ich glaube nicht, dass Sie das tun können ... Ich glaube, CAPS-LOCK wird wahrscheinlich vom Betriebssystem übersetzt, bevor es von vim jemals angezeigt wird. Sie müssten also auf Betriebssystemebene einen Hack machen, so wie die Registry-Hacks schon gesehen. 

BEARBEITEN: autohotkey sieht so aus, als könnte es für Überbrückung der vim-OS-Lücke verwendet werden. Auf diese Weise erledigt eine Drittanbieter-App die Hacks auf Betriebssystemebene, und Sie hängen nur diese App an.

4

Lösung, die Caps Lock außerhalb von vim nicht beschädigt

Windows

  1. Installieren Sie autohotkey.
  2. Autohotkey-Skript ausführen:

`` `

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

`` `

Linux

  1. Sudo apt-get install xdotool xbindkeys python. Wir werden auch xprop und cut verwenden.
  2. Erstellen Sie ein ~/caps_to_esc.sh-Skript:

`` `

#!/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. Neues Bindnig zu ~/.xbindkeysrc hinzufügen:

    "~/caps_to_esc.sh"
    Caps_Lock
    
  3. xbindkeys (wenn Sie xbindkes bereits gestartet haben, beenden Sie sie zuerst mit killall xbindkeys).

4
grabantot

Da es eine Lösung für Linux und Windows (Autohotkey) gibt, möchte ich vorschlagen, pckeyboardhack for Mac zu verwenden, um CapsLock überall neu zuzuordnen.

3
Jakob

Ich denke, einer der Gründe dafür ist das Erstellen eines Soft-Capslock, wie von anderen bereits erwähnt, um zu vermeiden, dass der Capslock im Normalmodus eingeschaltet bleibt. Ich habe das Plugin vimcaps verwendet, um den Capslock beim Verlassen des Einfügemodus zu deaktivieren. 

0
stu-b-doo

Auf Mac ist es auch möglich, Karabiner zu verwenden ( https://pqrs.org/osx/karabiner/ )

Brühbehälter installieren Karabiner-Elemente

Nach der Installation können Sie die Taste capslock der Taste esc auf der Registerkarte "Einfache Änderungen" zuordnen. Der Nachteil ist, dass dies systemweit ist, was bedeutet, dass Sie den Capslock-Schlüssel überall verlieren. IMO, der Capslock braucht.

0
Jimmy M.G. Lim