Як я можу створити режим вставки псевдо з іншою схемою клавіш?


9

Я в дещо незвичному становищі регулярно користуюся двома різними розкладками клавіатур ( Програмісти-Дворак і Турецька-F ). Ці розкладки сильно відрізняються один від одного, і я в змозі бути досвідченим у вімі з одним набором м'язових спогадів. Я досить досвідчений з командами vim в макеті Dvorak, але це практично неможливо використовувати, якщо моя клавіатура знаходиться в макеті Turkish-F. На жаль, я регулярно редагую файли англійською та турецькою та навіть змішаними мовами. Моє знання таке, що я можу досить добре набрати будь-яку мову у відповідному розкладі клавіатури, але мій мозок відмовляється перекреслити їх і набрати навіть кілька літер слова по-турецьки від макета Дворжака або навпаки.

У мене є прив’язки до двох ключів для зміни макета в Xorg, але навіть це залишає мені незручний робочий процес vim при редагуванні змішаних мовних файлів:

<vim commands…>i<switch to tr>…content…<escape><switch to en><vim commands…>

Я хотів би мати можливість скоротити це до чогось такого:

<vim commands…><leader>i…content…<escape><vim commands…>

... таке, що за допомогою <leader>iнабору купу :imapзначень для емуляції турецького макета без зміни компонування клавіатури системи. У той же час, iперейде в режим вставки, але без зайвих :imapзначень. Самі значення прості, мені просто потрібні відображення алфавіту приблизно так:

:imap a u
:imap A U
:imap o i
:imap O İ
"etc.

Питання полягає в тому , як встановити два режими вставки, один нормальний режим вставки і один псевдо вставки режим , який ідентичний для зв'язки відображень , крім, і як я можу викликати ці режими з <leader>i, <leader>aі так далі?


1
Ось інша ідея: у вас є InsertEnterі InsertLeaveautocmds, які можна використовувати для автоматичного перемикання макетів. Зокрема, InsertLeaveви можете перевірити, чи це турецька мова, якщо вона є, перемкнути на Дворак, встановити прапор, а коли ви введете вставити знову, перемкніть назад на турецьку, якщо це було в останній раз, коли ви вийшли з режиму вставки.
Мартін Турноїй

@Carpetsmoker Я не бачу, як це вирішує мої проблеми. Навіть якщо щось було "перевірити" (я не впевнений, що ви думаєте, я би там перевіряв ... частина проблеми полягає в тому, що я повертаюсь назад і вперед, слово в слово), одна з причин Думав, :imapщо це буде працювати навіть у віддаленому сеансі ssh або коли $DISPLAYінше не встановлено.
Калеб

Відповіді:


7

У Vim є щось подібне у вигляді ключових карт . Від :help mbyte-keymap:

When the keyboard doesn't produce the characters you want to enter in your
text, you can use the 'keymap' option.  This will translate one or more
(English) characters to another (non-English) character.  This only happens
when typing text, not when typing Vim commands.  This avoids having to switch
between two keyboard settings.

Тільки Caps Lock в режимі вставки описує таке відображення для емуляції Caps Lock; як ви бачите там, файл відображень схожий на те, що ви окреслили у своєму запитанні.

Цей параметр увімкнено через :set iminsert=1або динамічно через i_CTRL-^. Він також працює /searchз 'imsearch'опцією.


3

Відповідь Інго Каркат здається, що це було саме правильне рішення і вирішило мою ситуацію. Однак ось трохи докладніші інструкції для всіх, хто тільки починає функціонувати на мові карт мови.

Спочатку вам потрібен файл карти мови. Як і у прикладі Caps Lock, ви захочете помістити щось подібне у ~/.vim/keymap/dvorak2turkishf.vim(завантажте моє повне відображення з Githu b):

let b:keymap_name = "dvorak2turkishf"
loadkeymap
; f
, g
. ğ
p ı
y o
f d
g r
" etc...

Маючи це на місці, залишається встановити прив'язки, щоб активувати їх у деяких випадках, але не в інших. Ви хочете додати щось у свій ~/.vimrcфайл.

Спочатку прив’яжіть пошукову карту пошуку до вхідної:

set imsearch=-1

Потім встановіть, яка карта буде використовуватися для режиму введення іншої мови:

set keymap=dvorak2turkishf

Вимкніть альтернативний режим введення, щоб за замовчуванням не було змін:

set iminsert=0

Налаштуйте автоматичну команду для запуску кожного разу, коли виходите з режиму вставки, щоб вимкнути альтернативний перемикач мови:

autocmd InsertLeave * set iminsert=0

Додайте прив’язки для всіх різних способів, які ви можете перетворити на режим введення альтернативної мови, щоб, використовуючи <leader>(Зазвичай \) перед ними, перед переключенням вмикається карта мови:

nnoremap <leader>i :set iminsert=1<Cr>i
nnoremap <leader>I :set iminsert=1<Cr>I
nnoremap <leader>a :set iminsert=1<Cr>a
nnoremap <leader>A :set iminsert=1<Cr>A
nnoremap <leader>c :set iminsert=1<Cr>c
nnoremap <leader>C :set iminsert=1<Cr>C
nnoremap <leader>r :set iminsert=1<Cr>r
nnoremap <leader>R :set iminsert=1<Cr>R
nnoremap <leader>o :set iminsert=1<Cr>o
nnoremap <leader>O :set iminsert=1<Cr>O

Встановіть інший колір курсору, коли карта включена:

:highlight Cursor guifg=NONE guibg=Green
:highlight lCursor guifg=NONE guibg=Cyan

Все разом, ось що змінилося в моїй конфігурації . На завершення, якщо ви перебуваєте у режимі вставки, ви можете вмикати та вимикати параметр мовної карти, використовуючи <ctrl>+^.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.