Вопрос или проблема
Цель – переназначить CapsLock на Esc в Vim, установленном на Ubuntu (только консоль, без рабочего окружения).
Эта система Ubuntu установлена на виртуальном приватном сервере.
Я подключаюсь к этому серверу, используя Putty, со своего домашнего ноутбука с Windows 10.
И все говорят о том, как переназначить эту клавишу CapsLock на Esc в Vim, но я не смог найти реальную строку, которую нужно написать в файл $HOME/.vimrc.
Вот что я пробовал сам, но ничего из этого не работает, кроме первой строки, добавляющей номера строк:
set number
inoremap <Caps> <Esc>
inoremap <Caps_Lock> <Esc>
inoremap <CapsLock> <Esc>
Цель – переназначить CapsLock на Esc только в Vim, а не на весь сервер Ubuntu.
Я проверил, и CapsLock работает нормально в Vim и делает буквы заглавными, когда заблокирован.
Я искал на многих местах, таких как:
https://vim.fandom.com/wiki/Mapping_keys_in_Vim_-Tutorial(Part_1)
все 3 части этого руководства и здесь также.
Все там написано: переназначение “ii”, “jj”, “jk”, “jw” разных комбинаций Ctrl и Shift.
Все, кроме переназначения CapsLock на Esc.
??? Почему ???
Почему так трудно переназначить CapsLock на Esc в Vim?
Это почти мой вопрос, но, к сожалению, на Windows OS.
Из комментариев под моим вопросом я выяснил, что переназначение CapsLock на Esc невозможно в одном только Vim.
Я также прочитал эту ветку: Как использовать CapsLock вместо Escape в Vim?
И в принятом ответе говорится: “Для переназначения в консоли, если ваша дистрибуция использует systemd
, вы можете использовать пользовательскую раскладку клавиатуры в /etc/vconsole.conf
, как описано на Arch Wiki.”
Я думаю, что Ubuntu использует systemd
, поэтому я готов принять ответ, который переназначит CapsLock на Esc во всей Ubuntu, установленной на моем VPS, при условии, что маппинг клавиш моего домашнего Windows устройства останется неизменным.
Я выполнил это:
michal@localhost:~$ localectl status
System Locale: LANG=en_US.UTF-8
VC Keymap: n/a
X11 Layout: us
X11 Model: pc105
Что мне делать дальше?
Я думаю, у меня нет этого файла /etc/vconsole.conf
на моем Ubuntu VPS.
Стоит ли мне создать его самому, или он должен быть там по умолчанию?
Легкая альтернатива – добавить это в ваш файл vimrc
imap ii <Esc>
Здесь я использую ii (2 ‘и’) вместо Escape для возврата в нормальный режим.
Вы редко встретите слово с двумя подряд идущими ii в английском языке, поэтому вы не попадете случайно в нормальный режим.
Вы также можете заменить ii на любую другую клавишу, если хотите, но, насколько я знаю и пробовал, это не работает с такими клавишами, как Caps Lock, Shift, Ctrl и Alt, поскольку они требуют другую клавишу, чтобы задать что-то значимое.
.
Ответ или решение
Теория
Проблема заключается в том, что стандартными средствами Vim сложно переназначить модификационные клавиши, такие как CapsLock. Когда вы работаете в консольном режиме, вы являетесь зависимым от базового уровня функциональности терминала. В вашем случае CapsLock является частью аппаратной настройки клавиатуры и его переназначение через конфигурационные файлы Vim, такие как .vimrc, внутри терминала невозможно. Это связано с тем, что такие клавиши обрабатываются на уровне ядра операционной системы до передачи сигнала программным приложениям.
Для решения этой задачи необходимо переназначить CapsLock в пределах всей системы Ubuntu, но это не повлияет на ваш локальный компьютер с Windows, так как изменение будет затрагивать только серверную часть вашего Ubuntu VPS.
Пример
Для переназначения CapsLock на Esc на уровне системы в Ubuntu необходимо использовать утилиту loadkeys
для консольной клавиатурной раскладки. Сначала вам потребуется создать кастомную раскладку клавиатуры и применить ее к системе.
-
Создайте файл кастомной раскладки:
Создайте новый файл, например
custom.map
, где вы укажете переназначение CapsLock:echo "keycode 58 = Escape" > custom.map
-
Примените новый файл через
loadkeys
:Загрузите новый файл раскладки с помощью команды:
loadkeys custom.map
-
Сделайте изменения постоянными:
Чтобы изменения применялись автоматически при каждом запуске системы, добавьте команду в скрипт инициализации. Например, вы можете добавить команду
loadkeys /путь/до/custom.map
в файл/etc/rc.local
, перед строкойexit 0
, или использовать системный демонтатор. -
Проверьте изменения:
После выполнения данных шагов, CapsLock должен работать как клавиша Esc в Vim и любом другом приложении на вашем Ubuntu сервере.
Применение
Эти изменения помогут вам полноценно работать в Vim, не отвлекаясь на дальнее расположение клавиши Esc или ее неинтуитивное использование. С этим переназначением вы сможете легко переключаться в нормальный режим редактирования в Vim без необходимости модификации вашей конфигурации PuTTY или клавиатурных настроек Windows.
Как итог, если ваша цель заключается исключительно в переназначении CapsLock на Esc для удобства работы в Vim в консоли, описанное выше решение идеально подходит, так как позволяет выполнить задачу на уровне системы, не затрагивая клиентские устройства или другие приложения. Однако следует помнить, что подобного рода переназначения подойдут только в тех случаях, когда доступ к системе осуществляется исключительно через консоль без графической оболочки, что минимизирует конфликтующие ситуации с другими приложениями.