Как сопоставить ключ 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
`` `
-
sudo chmod +x ~/caps_to_esc.sh
-
Добавить новый bindnig в ~/.xbindkeysrc
:
"~/caps_to_esc.sh"
Caps_Lock
-
xbindkeys
(если вы уже запустили xbindkes
, тогда сначала запустите его killall xbindkeys
).
Ответ 10
Я думаю, что одна из причин для этого - создать мягкий каплок, как это упоминали другие, возможно, чтобы избежать удержания капсюля в нормальном режиме.
Я использовал vimcaps плагин, чтобы отключить капсюль при выходе из режима вставки, похоже, работает нормально.