Je možné zaměnit Esc a Ё ve Vimu? — Obecné — Fórum
Existuje pohodlná klávesnice s jednou významnou nevýhodou: místo Ё má Esc a pro psaní Ё musíte stisknout Fn+Esc.
Za ty roky dotykového psaní si moje ruce zvykly na automatické klikání na Ё, a proto při psaní ruského textu vždy „vylétnu“ z režimu vkládání. A pak ještě stihnu napsat pár dalších příkazů, než si uvědomím, co se stalo.
Je možné to udělat tak, že když stisknete Esc v režimu vkládání, napíšete ё nebo ` v závislosti na rozložení a když stisknete Fn+Esc, napíšete Esc?
děkuji za pozornost. Mějte dobrou náladu!

NěkteříV
19.02.24. 14. 04 36:XNUMX:XNUMX MSK
- Odpovězte na tuto zprávu
- Odkaz
Znovu svažte normální režim na Ctrl+G nebo použijte Ctrl+C. To je mnohem pohodlnější než stisknutí Esc.
anonymní
(19.02.24 14:10:53 MSK)
- Odpovězte na tuto zprávu
- Odkaz
Raději bych globálně přeřadil tlačítko v X. Ostatně problém není nejspíš jen ve vim.
firkax ★★★★★
(19.02.24 14:12:06 MSK)
- Odpovězte na tuto zprávu
- Ukaž odpověď
- Odkaz

esc in vim byl náhle nastaven na caps
shTigrity ★★★
(19.02.24 14:26:54 MSK)
- Odpovězte na tuto zprávu
- Ukaž odpověď
- Odkaz
Odpovědět: komentář od firkax 19.02.24/14/12 06:XNUMX:XNUMX MSK

Jen ne v X, ale na nižší úrovni.
t184256 ★★★★★
(19.02.24 14:51:02 MSK)
- Odpovězte na tuto zprávu
- Ukaž odpověď
- Odkaz
Spolehlivější je změnit globálně na nejnižší úrovni přes udev.
písmeno ё je ve skutečnosti klíč s vážným přízvukem – backtick, přízvuk, já nevím. Jak se tomu říká rusky?
Budete potřebovat vstupní kódy klíčů z /linux/include/uapi/linux/input-event-codes.h, kde jsou požadované kódy definovány jako KEY_ESC a KEY_GRAVE. Pro udev to bude velká písmena bez KEY_, tzn. „esc“ a „hrob“. HZ. proč by udev nemohl použít KEY_XXXX jak je napsáno v hlavičce, ale zašroubovat to.
Potřebujeme také hardwarové skenovací kódy nejnižší úrovně pro stisknutí Fn+Esc a Esc, které lze zobrazit například pomocí nástroje evtest.
. нажали Fn+Esc для "ё" или "`" Event: time 1708344434.050540, type 4 (EV_MSC), code 4 (MSC_SCAN), value 29 Соответственно сейчас KEYBOARD_KEY_29 – «ё» или KEY_GRAVE (grave в udev) и KEYBOARD_KEY_01 – Esc или KEY_ESC (esc в udev)
Надо наоборот, значит в /etc/udev/hwdb.d создаём файлик например yo2esc.hwdb где меняем местами привязку сканкодов и кейкодов input
evdev:input:b0011v0001p0001* KEYBOARD_KEY_29=esc KEYBOARD_KEY_01=grave Селектор evdev:input:b0011v0001p0001* делается так
$ grep -E '(^I|^N)' /proc/bus/input/devices . I: Bus=0011 Vendor=0001 Product=0001 Version=ab54 N: Name="AT Translated Set 2 keyboard" . Соответственно Bus=0011 -> b0011 , Vendor=0001 -> v0001 , Product=0001 -> p0001 , а дальше пофиг -> * слепляем, получаем искомое b0011v0001p0001*
Потом заставить udev перезагрузить hwdb udevadm hwdb –update и всё. Везде и всегда эта клавиатура будет выдавать нужные эвенты.
Stanson ★★★★★
( 19.02.24 15:12:17 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от t184256 19.02.24 14:51:02 MSK
Ну или ниже, если можно. А то про иксы я про перебиндивание кнопок слышал какой-то простой командой, а про остальное нет.
firkax ★★★★★
( 19.02.24 15:22:01 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от firkax 19.02.24 15:22:01 MSK
А то про иксы я про перебиндивание кнопок слышал какой-то простой командой
Вероятно, ты слышал про простую команду xmodmap. Это трэш и угар с кучей неочевидных сюрпризов, если используешь setxkbmap, особенно не только для настройки раскладок.
anonymous
( 19.02.24 15:30:54 MSK )
- Ответить на это сообщение
- Ссылка
такое нужно делать не на уровне vim, а через keymap/hwdb
mittorn ★★★★★
( 19.02.24 15:38:22 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от shTigrits 19.02.24 14:26:54 MSK
esc в vim, внезапно, был настроен на caps
Caps слишком удобная кнопка чтоб ее тратить на esc. ИМХО, удобнее всего переключать раскладку клавиатуры клавишей caps, а esc в vim забиндить на tab. Если же нужно напечатать символ табуляции то нажимать shift-tab.
Единственное исключение этого подхода – если нужно кодить на языках, где часто приходится печатать символ табуляции.
iron ★★★★★
( 19.02.24 16:08:54 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Stanson 19.02.24 15:12:17 MSK

Предлагаемый метод работает в виртуалке только для её виртуальной клавиатуры, которая определяется как AT Translated Set 2 Keyboard со следующими параметрами: b0011v0001p0001. Однако если в виртуалку пробросить нужную мне клаву, то для неё это не работает. Естественно, все параметры в файле при этом я изменяю на соответствующие этой клавиатуре.
На реальном компьютере этот метод почему-то не работает ни для одной моей клавиатуры.
1-я клавиатура Logitech полноразмерная, подключена через переходник 2шт.PS/2(для клавы и мыши)-to-USB
I: Bus=0003 Vendor=13ba Product=0018 Version=0110 N: Name=“Barcode Reader “ I: Bus=0003 Vendor=13ba Product=0018 Version=0110 N: Name=«Barcode Reader Mouse» I: Bus=0003 Vendor=13ba Product=0018 Version=0110 N: Name=«Barcode Reader System Control» I: Bus=0003 Vendor=13ba Product=0018 Version=0110 N: Name=«Barcode Reader Consumer Control»
evtest для неё выдаёт следующие коды:
^[Event: time 1708362713.459470, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70029 Event: time 1708362713.459470, type 1 (EV_KEY), code 1 (KEY_ESC), value 0
`Event: time 1708362757.851481, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70035 Event: time 1708362757.851481, type 1 (EV_KEY), code 41 (KEY_GRAVE), value 0
И я для неё формирую следующий файл /etc/udev/hwdb.d/yo2esc.hwdb
evdev:input:b0003v13bap0018* KEYBOARD_KEY_70035=esc KEYBOARD_KEY_70029=grave
Далее запускаю udevadm hwdb –update и перезагружаюсь. В виртуалке этого достаточно чтобы начал работать ремап для виртуальной клавиатуры. А на хосте не работает.
2-я клавиатура Redragon 61-клавишная, из-за которой всё и затевается, подключена через USB.
I: Bus=0003 Vendor=0c45 Product=5004 Version=0111 N: Name=«SONiX Draconic» I: Bus=0003 Vendor=0c45 Product=5004 Version=0111 N: Name=«SONiX Draconic Keyboard» I: Bus=0003 Vendor=0c45 Product=5004 Version=0111 N: Name=«SONiX Draconic» I: Bus=0003 Vendor=0c45 Product=5004 Version=0111 N: Name=«SONiX Draconic Mouse»
evtest для неё выдаёт те же самые коды коды:
^[Event: time 1708362713.459470, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70029 Event: time 1708362713.459470, type 1 (EV_KEY), code 1 (KEY_ESC), value 0
`Event: time 1708362757.851481, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70035 Event: time 1708362757.851481, type 1 (EV_KEY), code 41 (KEY_GRAVE), value 0
И я для неё формирую следующий файл /etc/udev/hwdb.d/yo2esc.hwdb
evdev:input:b0003v0c45p5004* KEYBOARD_KEY_70035=esc KEYBOARD_KEY_70029=grave
Далее запускаю udevadm hwdb –update и перезагружаюсь. И тоже безрезультатно. Странно, что в виртуалке работает для виртуальной клавиатуры, а для реальной не работает.
Подскажите, что я делаю не так?
SomeV
( 19.02.24 20:21:53 MSK ) автор топика
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от SomeV 19.02.24 20:21:53 MSK

А почему «спойлеры» не сработали? Я помещал вывод между «трёх больше» и «трёх меньше».
SomeV
( 19.02.24 20:24:20 MSK ) автор топика
- Ответить на это сообщение
- Ссылка

У меня на прошлой работе был ноутбук с такой инвалидной клавиатурой, страшно мешало.
Mobutu_Sese_Seko ★
( 19.02.24 20:30:03 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от SomeV 19.02.24 20:21:53 MSK
Можно попробовать выкинуть 700 из сканкодов. Т.е. KEYBOARD_KEY_35 и KEYBOARD_KEY_29 Вдруг сработает?
Документации к системдешному udev на эту тему я вообще никакой не нашёл сходу, так что по-уму надо лезть в сырцы udev и смотреть, может там тонкости какие-то есть для многобайтовых сканкодов больше 255 (ff).
Для эмулируемой клавиатуры виртуалки работает потому что там сканкоды однобайтные скорее всего.
Ещё можно вот что попробовать – селектор девайса широкий, для любых девайсов – evdev:input:* и evdev:atkbd:* .
Посмотреть на селектор девайса можно втыкая-вытыкая клаву при запущенном udevadm monitor –property | grep MODALIAS
ЗЫ: тут есть разметка, рекомундую почитать описание, чтобы камменты читаемые были.
Stanson ★★★★★
( 19.02.24 22:53:10 MSK )
Последнее исправление: Stanson 19.02.24 23:00:44 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от SomeV 19.02.24 20:21:53 MSK
Отрыл USB клаву, она правда старая и греческая, но сканкоды такие же как у тебя.
. MODALIAS=input:b0003v062Ap0201 . . в /etc/udev/hwdb/test.hwdb запихал
evdev:input:b0003v062Ap0201* KEYBOARD_KEY_70035=esc KEYBOARD_KEY_70029=grave Переназначение работает без проблем.
Event: time 1708373353.916156, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70029 Event: time 1708373353.916156, type 1 (EV_KEY), code 41 (KEY_GRAVE), value 1 Event: time 1708373353.916156, -------------- SYN_REPORT ------------ `Event: time 1708373354.052083, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70029 Event: time 1708373354.052083, type 1 (EV_KEY), code 41 (KEY_GRAVE), value 0 Event: time 1708373354.052083, -------------- SYN_REPORT ------------ Event: time 1708373355.236122, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70035 Event: time 1708373355.236122, type 1 (EV_KEY), code 1 (KEY_ESC), value 1 Event: time 1708373355.236122, -------------- SYN_REPORT ------------ ^[Event: time 1708373355.356182, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70035 Event: time 1708373355.356182, type 1 (EV_KEY), code 1 (KEY_ESC), value 0 Event: time 1708373355.356182, -------------- SYN_REPORT ------------ Единственное что – у меня eudev 243.
А, ещё проверь чтобы шестнадцатиричные значения в селекторе evdev:input:… были с заглавными буквами, как udevadm monitor -p выдаёт. У нынешних авторов udev вообще очень странное отношение к этим селекторам и пр. вещам. Как и к документации.
Далее запускаю udevadm hwdb –update и перезагружаюсь. В виртуалке этого достаточно чтобы начал работать ремап для виртуальной клавиатуры. А на хосте не работает.
Ещё, чтобы применилось после udevadm hwdb –update , надо чтобы udev словил ADD, в случае USB клавы достаточно её переподключить.
Stanson ★★★★★
( 19.02.24 23:19:12 MSK )
Последнее исправление: Stanson 19.02.24 23:25:38 MSK (всего исправлений: 2)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Stanson 19.02.24 23:19:12 MSK

А, ещё проверь чтобы шестнадцатиричные значения в селекторе evdev:input:… были с заглавными буквами, как udevadm monitor -p выдаёт. У нынешних авторов udev вообще очень странное отношение к этим селекторам и пр. вещам. Как и к документации.
Дело было именно в этом. В поле b0003v0c45p5004* заменил «си» на заглавную, и всё заработало. А ведь можно было догадаться по тому, что в самом начале udev ругнулся следующей фразой: Property expected, ignoring record with no properties , и пришлось отступы табуляцией заменить на отступы пробелами. Это говорит о том, что udev очень «чувствителен» к символам, и ему нужно подавать только пробелы, и только заглавные буквы в данном случае.
udevadm monitor -p действительно выдаёт строку MODALIAS=usb:v0C45p5004. где v0C45 видим с заглавной «С». Хотя в других местах тоже самое приводится со строчной буквой: ID_VENDOR_ID=0c45 , – двойные стандарты в буквальном смысле.
Теперь всё работает как и хотелось – для конкретной клавиатуры выполняется переназначение, а с другими всё по умолчанию.
Stanson , благодарю! Вы мне очень помогли.
И спасибо всем ответившим.
ЗЫ: тут есть разметка, рекомундую почитать описание, чтобы камменты читаемые были.
Да, я сразу попытался скрыть эти большие выводы в спойлеры, но потом увидел, что на форуме спойлеры не работают. А как изменить уже готовый свой ответ не нашёл. Кнопки нет.
SomeV
( 20.02.24 10:27:26 MSK ) автор топика
- Ответить на это сообщение
- Ссылка