Ich bin in der etwas ungewöhnlichen Position, regelmäßig zwei verschiedene Tastaturlayouts zu verwenden ( Programmierer-Dvorak und Türkisch-F ). Diese Layouts sind sehr unterschiedlich und ich kann nur mit einem Satz Muskelerinnerungen Vim beherrschen. Ich beherrsche vim-Befehle im Dvorak-Layout ziemlich gut, aber es ist fast unmöglich, sie zu verwenden, wenn sich meine Tastatur im Türkisch-F-Layout befindet. Leider bearbeite ich regelmäßig Dateien in Englisch und Türkisch und sogar in gemischten Sprachen. Meine Kenntnisse sind so, dass ich jede Sprache in ihrem jeweiligen Tastaturlayout ziemlich gut eingeben kann, aber mein Gehirn weigert sich, sie zu verkabeln und sogar einige Buchstaben eines Wortes auf Türkisch aus dem Dvorak-Layout einzugeben oder umgekehrt.
Ich habe Zwei-Tasten-Gruß-Bindungen zum Ändern des Layouts in Xorg, aber selbst dies führt zu einem umständlichen Workflow in vim beim Bearbeiten von Dateien in gemischten Sprachen:
<vim commands…>i<switch to tr>…content…<escape><switch to en><vim commands…>
Ich möchte dies auf etwas verkürzen können wie:
<vim commands…><leader>i…content…<escape><vim commands…>
... so dass mit using <leader>i
eine Reihe von :imap
Werten festgelegt wird, um das türkische Layout zu emulieren, ohne das Systemtastaturlayout zu ändern. Gleichzeitig i
würde in den Einfügemodus wechseln, jedoch ohne die zusätzlichen :imap
Werte. Die Werte selbst sind einfach, ich brauche nur die Alphabet-Zuordnungen wie diese:
:imap a u
:imap A U
:imap o i
:imap O İ
"etc.
Die Frage ist, wie die Einrichtung zwei Einsatzarten, eine normale Insert - Modus und ein Pseudo-Insert - Modus, mit Ausnahme einer Reihe von Zuordnungen identisch ist, und wie kann ich auslösen diese Modi mit <leader>i
, <leader>a
usw.?
InsertEnter
undInsertLeave
autocmds, die Sie automatisch auf Schalter - Layout. Insbesondere können Sie auf demInsertLeave
Feld überprüfen, ob es türkisch ist. Wenn dies der Fall ist, wechseln Sie zu Dvorak, setzen Sie ein Flag, und wechseln Sie bei erneuter Eingabe von Einfügen wieder zu Türkisch, wenn dies beim letzten Verlassen des Einfügemodus der Fall war.:imap
dass es auch in einer Remote-SSH-Sitzung funktionieren würde oder wenn$DISPLAY
es nicht anders eingestellt ist.Antworten:
Vim hat so etwas in Form von Keymaps . Von
:help mbyte-keymap
:Nur Caps Lock im Einfügemodus beschreibt eine solche Zuordnung zur Emulation von Caps Lock. Wie Sie dort sehen können, ähnelt die Zuordnungsdatei dem, was Sie in Ihrer Frage skizzieren.
Sie aktivieren diese Einstellung über
:set iminsert=1
oder dynamisch überi_CTRL-^
. Es funktioniert auch/search
mit der'imsearch'
Option.quelle
Ingo Karkats Antwort scheint genau die richtige Lösung zu sein und hat meine Situation gelöst. Hier finden Sie jedoch etwas ausführlichere Anweisungen für alle anderen, die gerade erst mit den Sprachkartenfunktionen von vim beginnen.
Zunächst benötigen Sie eine Sprachzuordnungsdatei. Wie im Beispiel für die Feststelltaste möchten Sie Folgendes einfügen
~/.vim/keymap/dvorak2turkishf.vim
(laden Sie meine vollständige Zuordnung von Githu b herunter ):Wenn dies vorhanden ist, müssen noch Bindungen eingerichtet werden, um sie in einigen Fällen zu aktivieren, in anderen jedoch nicht. Sie möchten Ihrer
~/.vimrc
Datei etwas hinzufügen .Binden Sie zuerst die Such-Keymap an die eingegebene:
Stellen Sie dann ein, welche Keymap für den Eingabemodus in einer anderen Sprache verwendet wird:
Schalten Sie den alternativen Eingabemodus aus, damit sich standardmäßig nichts ändert:
Richten Sie einen automatischen Befehl ein, der ausgeführt wird, wenn Sie den Einfügemodus verlassen, um den Schalter für die alternative Sprache auszuschalten:
Fügen Sie Bindungen für all die verschiedenen Arten hinzu, wie Sie möglicherweise in den Eingabemodus für alternative Sprachen gelangen, sodass bei Verwendung von
<leader>
(Normalerweise\
) vor ihnen die Sprachzuordnung vor dem Umschalten aktiviert wird:Stellen Sie eine andere Cursorfarbe ein, wenn die Karte aktiviert ist:
Alles in allem hat sich Folgendes in meiner Konfiguration geändert . Abschließend können Sie im Einfügemodus die Sprachzuordnungsoption ein- und ausschalten
<ctrl>+^
.quelle