Как сопоставить ключ CAPS LOCK в VIM?

Я использую GVIM под Windows. И хотите сопоставить CAPSLOCK с Ctrl + ^

Как это сделать?

Btw, я вижу множество образцов в Интернете, как обменивать CAPS и Esc с помощью реестра, но никто из них не использует команду VIM map, вместо этого внешние инструменты и изменения реестра.

Ответ 1

Capslock (и Control, Shift и т.д.) - это ключ-модификатор, что означает, что он используется с другим обычным ключом для изменения значения этого ключа. AFAIK ОС не передает ключи модификатора в приложение, если не был нажат обычный ключ, например. нажатие CTRL не будет видно приложению, но CTRL-C будет.

Ответ 2

Linux? С помощью X используйте xmodmap для изменения отображения клавиш, например.

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

Отобразит Esc в ключе CapsLock. Google больше примеров.

Ответ 3

Под окнами? Используйте AutoHotkey. Это не картография vim, но, как утверждают другие, вы не можете ее сопоставить. Я использую AHK для сопоставления моего CAPSLOCK с CTRL.

Ответ 4

Если вы намерены избегать работы вне Vim, вы можете поместить эти строки в свой .vimrc:

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

Первая строка отображает escape на ключ блокировки колпачков при вводе Vim, а вторая строка возвращает нормальную функциональность в блокировку блокировки при выходе.

Для этого требуется Linux с установленным пакетом xorg-xmodmap.

Ответ 5

В системах Linux это можно сделать с помощью xmodmap.

Сохраните это в текстовом файле в домашней папке

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

Сохраните этот файл с таким именем, как .capstoescswitc

Затем выполните этот файл через терминал.

xmodmap ~/.capstoescswitc 

Если вы хотите почитать, просто переключите ключевые переменные в файле script.

Для получения дополнительной информации обратитесь к страница

Ответ 6

В Mac OS вы можете переназначить систему ключей "caps lock" в "системных настройках".

Следуйте этому пути:

системные настройки > клавиатурa > клавиши-модификаторы

Затем нажмите раскрывающееся поле рядом с "caps lock" и выберите "^ Control".

Ответ 7

Я не думаю, что ты можешь. Я считаю, что CAPS-LOCK, вероятно, переводится ОС перед тем, как vim когда-либо его увидит. Таким образом, вам нужно будет взломать уровень ОС, например, хакеры реестра, которые вы уже видели.

EDIT: autohotkey выглядит так, как будто он может быть использован для преодолеть разрыв vim-OS. Таким образом, приложение thirdparty делает хаки на уровне ОС, и вы просто подключаете это приложение.

Ответ 8

Так как есть решение для Linux и Windows (Autohotkey), я хотел бы предложить использовать pckeyboardhack для Mac для переназначения CapsLock везде.

Ответ 9

Решение, которое не нарушает Caps Lock вне vim

Окна

  • Установить autohotkey.
  • Запустить autohotkey script:

`` `

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

`` `

Linux

  • sudo apt-get install xdotool xbindkeys python. Мы также будем использовать xprop и cut.
  • Создайте ~/caps_to_esc.sh script:

`` `

#!/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. Добавить новый bindnig в ~/.xbindkeysrc:

    "~/caps_to_esc.sh"
    Caps_Lock
    
  3. xbindkeys (если вы уже запустили xbindkes, тогда сначала запустите его killall xbindkeys).

Ответ 10

Я думаю, что одна из причин для этого - создать мягкий каплок, как это упоминали другие, возможно, чтобы избежать удержания капсюля в нормальном режиме. Я использовал vimcaps плагин, чтобы отключить капсюль при выходе из режима вставки, похоже, работает нормально.