Jestem w nieco nietypowej sytuacji, gdy regularnie używam dwóch różnych układów klawiatury ( Programmers-Dvorak i Turkish-F ). Te układy różnią się od siebie i jestem w stanie posługiwać się tylko jednym zestawem wspomnień mięśniowych. Jestem dość biegły w posługiwaniu się poleceniami vim w układzie Dvorak, ale prawie niemożliwe jest użycie, jeśli moja klawiatura jest w układzie tureckim-F. Niestety regularnie edytuję pliki w języku angielskim i tureckim, a nawet mieszanym. Moja biegłość jest taka, że potrafię dość dobrze pisać dowolny język w odpowiednim układzie klawiatury, ale mój mózg nie chce ich krzyżować i pisać nawet kilka liter słowa po turecku z układu Dvorak lub odwrotnie.
Mam powiązania z dwoma kluczami-pozdrowienia do zmiany układu w Xorg, ale nawet to pozostawia mi niezręczny przepływ pracy w vimie podczas edycji plików mieszanych języków:
<vim commands…>i<switch to tr>…content…<escape><switch to en><vim commands…>
Chciałbym móc to skrócić do czegoś takiego jak:
<vim commands…><leader>i…content…<escape><vim commands…>
... takie, że użycie <leader>i
ustawia wiązkę :imap
wartości do emulacji układu tureckiego bez zmiany układu klawiatury systemowej. Jednocześnie i
przełącza się na tryb wstawiania, ale bez dodatkowych :imap
wartości. Same wartości są łatwe, potrzebuję tylko mapowania alfabetu czegoś takiego:
:imap a u
:imap A U
:imap o i
:imap O İ
"etc.
Chodzi o to, w jaki sposób skonfigurować dwoma trybami wstawiania, jeden normalny tryb wstawiania i jeden pseudo wkładka trybie, który jest identyczny z wyjątkiem grupą odwzorowań, iw jaki sposób można wywołać z tych trybów <leader>i
, <leader>a
itp?
InsertEnter
iInsertLeave
autocmds, których możesz użyć do automatycznego przełączania układów. W szczególnościInsertLeave
możesz sprawdzić, czy jest to turecki, jeśli tak, przełącz się na Dvorak, ustaw flagę, a po ponownym wprowadzeniu wstawiania przełącz się z powrotem na turecki, jeśli tak było w przypadku ostatniego wyjścia z trybu wstawiania.:imap
ten sposób, że działałby nawet w zdalnej sesji ssh lub gdy$DISPLAY
inaczej nie jest ustawiony.Odpowiedzi:
Vim ma coś takiego w postaci map klawiszy . Od
:help mbyte-keymap
:Tylko tryb wstawiania Caps Lock opisuje takie odwzorowanie do emulacji Caps Lock; jak widać, plik mapowań jest podobny do tego, co zarysujesz w swoim pytaniu.
Możesz włączyć to ustawienie za pomocą
:set iminsert=1
lub dynamicznie za pomocąi_CTRL-^
. Działa również/search
z'imsearch'
opcją.źródło
Odpowiedź Ingo Karkata wydaje się, że było to właściwe rozwiązanie i rozwiązało moją sytuację. Oto jednak trochę bardziej szczegółowe instrukcje dla każdego, kto dopiero zaczyna korzystać z funkcji mapowania języka vima.
Najpierw potrzebujesz pliku mapy językowej. Tak jak w przykładzie Caps Lock, będziesz chciał umieścić coś takiego jak poniżej
~/.vim/keymap/dvorak2turkishf.vim
(pobierz moje pełne mapowanie z Githu b):Mając to na swoim miejscu, pozostaje ustawienie powiązań, aby aktywować go w niektórych przypadkach, ale nie w innych. Będziesz chciał dodać coś do swojego
~/.vimrc
pliku.Najpierw powiąż mapę kluczową wyszukiwania z wejściową:
Następnie ustaw mapę klawiszy, która będzie używana w trybie wprowadzania w języku alternatywnym:
Wyłącz alternatywny tryb wprowadzania, aby domyślnie nie było zmian:
Skonfiguruj automatyczne polecenie, aby było uruchamiane za każdym razem, gdy opuszczasz tryb wstawiania, aby wyłączyć przełącznik języka alternatywnego:
Dodaj wiązania dla wszystkich różnych sposobów, w jakie możesz skończyć w trybie wprowadzania w języku alternatywnym, aby użycie
<leader>
(Zwykle\
) przed nimi ustawiło przełącznik języka na włączony przed przełączeniem:Ustaw inny kolor kursora, gdy mapa jest włączona:
Wszystko razem, oto co zmieniło się w mojej konfiguracji . Na koniec, w trybie wstawiania możesz włączać i wyłączać opcję mapy językowej za pomocą
<ctrl>+^
.źródło