Как сопоставить ключ CAPS LOCK в VIM?
Я использую GVIM под Windows. И хотите сопоставить CAPSLOCK с Ctrl+^
Есть ли способ сделать это?
Кстати, я вижу множество примеров в Интернете, как поменять CAPS и Esc, используя взлом реестра, но ни один из них не использует команду карты VIM, вместо этого внешние инструменты и изменения реестра.
16 ответов
Capslock (и Control, Shift и т. Д.) - это клавиша-модификатор, которая означает, что она используется с другой нормальной клавишей для изменения значения этой клавиши. AFAIK ОС не передает клавиши-модификаторы приложению, если не была нажата обычная клавиша, например, нажатие CTRL
не будет видно приложением, но CTRL-C
будет.
Linux? С X используйте xmodmap, чтобы изменить отображение клавиш, например
xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
Будет отображать Esc на ключ CapsLock. Google для большего количества примеров.
Если вы хотите избежать работы вне Vim, вы можете поместить эти строки в ваш.vimrc:
au VimEnter * !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
au VimLeave * !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock'
Первая строка отображает экранирование на клавишу Caps Lock при входе в Vim, а вторая строка возвращает нормальную функциональность к Caps Lock при выходе.
Для этого требуется Linux с установленным пакетом xorg-xmodmap.
Для Mac OS вы можете переназначить системный ключ "caps lock" в "системные настройки".
Следуйте по этому пути:
системные настройки> клавиатура> клавиши-модификаторы
Затем щелкните раскрывающийся список рядом с "Caps Lock" и выберите "^ Control".
Под окнами? Используйте AutoHotkey. Это не отображение vim, но, как утверждают другие, вы не можете отобразить его. Я использую AHK, чтобы сопоставить мой CAPSLOCK с CTRL.
В системах 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
Если хотите почитать его, просто переключите ключевые переменные в файле скрипта.
Для получения дополнительной информации обратитесь к этой странице
Решение, которое не ломается Caps Lock
вне Vim
Windows
- Установите автоотключение.
- Запустите скрипт autohotkey:
`` `
;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
сценарий:
`` `
#!/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
Добавить новую привязку к
~/.xbindkeysrc
:"~/caps_to_esc.sh" Caps_Lock
xbindkeys
(если вы уже началиxbindkes
затем убей это сначалаkillall xbindkeys
).
Я не думаю, что ты можешь. Я полагаю, что CAPS-LOCK, вероятно, переведен ОС еще до того, как vim его увидит. Так что вам нужно будет взломать на уровне ОС, как взломы реестра, которые вы уже видели.
РЕДАКТИРОВАТЬ: autohotkey выглядит так, как будто его можно использовать для устранения пробела в vim-OS. Таким образом, стороннее приложение делает хаки на уровне ОС, и вы просто подключаете это приложение.
Ответ @rsoren работает. Но проблема в том, что если открыто несколько буферов, то при выходе из одного происходит обратное отображение и для всех остальных. Замена VimEnter и VimLeave на BufEnter и BufLeave помогла мне.
au BufEnter * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
au BufLeave * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock'
Поскольку существует решение для Linux и Windows(Autohotkey), я хотел бы предложить использовать pckeyboardhack для Mac, чтобы переназначить CapsLock везде.
Переназначить CAPSLOCK
к ESC
а также CTRL
в Windows
Если вы хотите переназначить CAPSLOCK
как для
- к
ESC
(при нажатии в одиночку) - к
CTRL
(при нажатии с другими клавишами) вы можете использовать эту небольшую часть программного обеспечения с открытым исходным кодом от ililim.
Для этого вам не нужны права администратора и ESC
а также CTRL
все еще работают, как ожидалось.
Я использую это, чтобы наслаждаться удобным CTRL + anything
нажимает, не повреждая мой мизинец, и переключает режимы в Vim, который я использую через ssh в MobaXterm. Для установки просто следуйте этому описанию.
Переназначить CAPSLOCK
к ESC
а также CTRL
в Linux
Чтобы сделать то же самое в Linux, вы можете использовать XCAPE. Чтобы установить его в Ubuntu, используйте:
sudo apt install xcape
Для фактического отображения выполните:
setxkbmap -option ctrl:nocaps
xcape -e 'Control_L=Escape'
Первая команда - отобразить CAPSLOCK
к ESC
тогда как второй заботится о CTRL
нажата другими клавишами.
Чтобы это постоянно работало в сеансах X, вы можете добавить это в ~/.xprofile
.
Я просмотрел ответы на этот вопрос, чтобы сделать это самостоятельно, но я искал что-то немного другое:
- я использую линукс
- Я с удовольствием меняю ЗАГЛАВНЫЕ БУКВЫ даже вне Vim (я нажимаю почти всегда по ошибке, и я могу оставить его на кнопке Esc в любом случае для целей, которые я использую)
- Я хотел бы использовать наиболее распространенное программное обеспечение , чтобы не требовать дополнительной установки
- Я бы предпочел KISS, а затем даже избегаю необходимости в дальнейших длинных сценариях.
- Я хотел бы иметь оба
CAPS -> Esc
А ТАКЖЕCAPS + <something> -> Ctrl + <something>
, если возможно
Тогда мое текущее решение:
# ~/.xprofile
xmodmap $HOME/.xmodmap
а также:
! ~/.xmodmap
clear lock
keycode 66 = Escape
keycode 9 = Caps_Lock
add lock = Caps_Lock
clear control
add control = Control_L Control_R Escape
Похоже, пока что это работает как шарм, но я ищу отзывы :)
Я полагаю, что одной из причин для этого является создание мягкого колпачка, как уже упоминалось другими, возможно, чтобы избежать удержания колпака в обычном режиме. Я использовал плагин vimcaps для отключения capslock при выходе из режима вставки, похоже, работает нормально.
На Mac также можно использовать Karabiner ( https://pqrs.org/osx/karabiner/)
$ brew cask установить карабин-элементы
После установки вы можете сопоставить ключ capslock с ключом esc на вкладке простых изменений. Предостережение: это общесистемная система, а это означает, что вы теряете ключ от кепки в любом месте ИМО кому нужен кепслок.
С X (Linux), как упоминал @Dan Andreatta, используйте
xmodmap
изменить сопоставление клавиш, например
xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
Будет сопоставлен Escс CapsLockключом.
Вы также можете установить это в камне, добавив его в файл инициализации X, например — который запускается при использовании
startx
—:
clear lock
keycode 0x42 = Escape
Как правило, это помещается внутри
.Xmodmap
файл, а затем он запускается внутри
.xinitrc
.
В документации Vim есть целая страница, посвященная этой теме, и раздел комментариев особенно полезен.
Рабочий пример для простого пользователя Mortal WINDOWS, такого как я, по состоянию на 2020 год, использует AutoHotkey.
В настоящее время используется этот однострочный скрипт:
Capslock::Esc
Запустите его, и ваша проблема будет решена. Надеюсь, это поможет.:)