web-dev-qa-db-fra.com

Comment mapper la touche CAPS LOCK dans VIM?

J'utilise GVIM sous Windows. Et voulez mapper CAPSLOCK sur Ctrl + ^

Une façon de faire ça?

Btw, je vois des tonnes d'échantillons sur le Web comment échanger CAPS et Esc en utilisant le piratage du registre, mais aucun d'eux n'utilise la commande VIM map;.

48
Evgenyt

Linux? Avec X, utilisez xmodmap pour modifier le mappage de clé, par exemple.

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

Mappera Echap sur la touche CapsLock. Google pour plus d'exemples.

55
Dan Andreatta

Si votre intention est simplement d'éviter de travailler en dehors de Vim, vous pouvez insérer ces lignes dans votre fichier .vimrc:

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

La première ligne mappe la touche d'échappement avec la touche majuscule lorsque vous entrez dans Vim, et la deuxième ligne rétablit le verrouillage majuscule lorsque vous quittez. 

Cela nécessite Linux avec le paquet xorg-xmodmap installé.

22
rsoren

Sous les fenêtres? Utilisez AutoHotkey . Ce n'est pas un mappage Vim, mais comme d'autres l'ont dit, vous ne pouvez pas le mapper. J'utilise AHK pour mapper mon CAPSLOCK sur CTRL.

16
hometoast

Pour Mac OS, vous pouvez remapper la clé "majuscule" dans l'ensemble du système dans les "préférences système".

Suivez ce chemin:

préférences système> clavier> touches de modification

Cliquez ensuite sur la liste déroulante à côté de «majuscules» et choisissez «^ Contrôle».

10
Courtney Pattison

Capslock (et Control, Shift etc.) est une touche de modification, ce qui signifie qu’elle est utilisée avec une autre touche normale pour modifier la signification de cette touche. Autant que je sache, le système d’exploitation ne transmet pas les touches de modification à l’application, sauf si une touche normale a également été actionnée, par exemple En appuyant sur CTRL ne sera pas vu par l'application, mais CTRL-C sera.

10
liwp

Sur les systèmes Linux, cela peut être fait avec xmodmap.

Enregistrer ceci dans un fichier texte dans le dossier de départ

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

Enregistrez ce fichier avec un nom comme .capstoescswitc

Puis exécutez ce fichier via le terminal.

xmodmap ~/.capstoescswitc 

Si vous voulez le respecter, il vous suffit de basculer les variables clés dans le fichier de script.

Pour plus d'informations, reportez-vous à cette page page

9
Nirojan Selvanathan

Je ne pense pas que vous puissiez ... Je crois que CAPS-LOCK est probablement traduit par le système d'exploitation avant que vim ne le voie jamais ... donc vous auriez besoin de faire un piratage au niveau du système d'exploitation, comme les hacks de registre que vous avez déjà vu. 

EDIT: autohotkey semble pouvoir être utilisé pour combler le fossé vim-OS . De cette façon, une application tierce fait des piratages au niveau du système d'exploitation et vous ne faites que l'accrocher à cette application.

4
Michael Anderson

Solution qui ne casse pas Caps Lock en dehors de vim

Les fenêtres

  1. Installez autohotkey.
  2. Exécutez le script autohotkey:

`` `

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

`` `

Linux

  1. Sudo apt-get install xdotool xbindkeys python. Nous allons également utiliser xprop et cut.
  2. Créez 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. Ajouter un nouveau bindnig à ~/.xbindkeysrc:

    "~/caps_to_esc.sh"
    Caps_Lock
    
  3. xbindkeys (si vous avez déjà lancé xbindkes, supprimez-le d'abord avec killall xbindkeys).

4
grabantot

Puisqu'il existe une solution pour Linux et Windows (Autohotkey), j'aimerais suggérer d'utiliser pckeyboardhack pour Mac pour remapper CapsLock partout.

3
Jakob

Je suppose que l’une des raisons de cette opération est de créer un capslock souple, comme d’autres l'ont déjà mentionné, afin d'éviter éventuellement de garder le majuscule en mode normal. J'ai utilisé le plugin vimcaps pour désactiver Capslock lorsque vous quittez le mode insertion, semble fonctionner correctement. 

0
stu-b-doo

Sur mac, il est également possible d’utiliser Karabiner ( https://pqrs.org/osx/karabiner/ )

$ brassin installez des mousquetons

Une fois installé, vous pouvez associer la touche capslock à la touche esc dans l’onglet Modifications simples. La mise en garde est qu'il s'agit de l'ensemble du système, ce qui signifie que vous perdez la touche majuscule partout. OMI qui a besoin de capslock.

0
Jimmy M.G. Lim