Je suis dans la position légèrement inhabituelle d'utiliser régulièrement deux dispositions de clavier différentes ( Programmers-Dvorak et Turkish-F ). Ces dispositions sont assez différentes les unes des autres et je ne suis capable de maîtriser le vim qu'avec un seul ensemble de souvenirs musculaires. Je suis assez compétent avec les commandes vim dans la disposition Dvorak, mais il est presque impossible à utiliser si mon clavier est dans la disposition Turkish-F. Malheureusement, j'édite régulièrement des fichiers en anglais et en turc et même en plusieurs langues. Ma compétence est telle que je peux assez bien taper l'une ou l'autre langue dans sa disposition de clavier respective, mais mon cerveau refuse de les croiser et de taper même quelques lettres d'un mot en turc à partir de la disposition Dvorak ou vice versa.
J'ai des liaisons de salut à deux touches pour changer la disposition dans Xorg, mais même cela me laisse un flux de travail maladroit dans vim lors de l'édition de fichiers en langues mixtes:
<vim commands…>i<switch to tr>…content…<escape><switch to en><vim commands…>
J'aimerais pouvoir raccourcir ceci en quelque chose comme:
<vim commands…><leader>i…content…<escape><vim commands…>
... telle que l'utilisation <leader>i
définit un ensemble de :imap
valeurs pour émuler la disposition turque sans modifier la disposition du clavier système. Dans le même temps, i
passerait en mode insertion mais sans les :imap
valeurs supplémentaires . Les valeurs elles-mêmes sont faciles, j'ai juste besoin des mappages alphabétiques quelque chose comme ça:
:imap a u
:imap A U
:imap o i
:imap O İ
"etc.
La question est, comment configurer deux modes d'insertion, un mode d'insertion normal et un pseudo insert mode qui est identique , sauf pour un groupe d'applications, et comment puis - je déclencher ces modes avec <leader>i
, <leader>a
etc.?
InsertEnter
etInsertLeave
autocmds, que vous pouvez utiliser pour changer automatiquement de disposition. Plus précisément, sur le,InsertLeave
vous pouvez vérifier s'il est turc, si c'est le cas, basculez vers Dvorak, définissez un indicateur et lorsque vous entrez à nouveau dans l'insertion, revenez au turc si tel était le cas la dernière fois que vous avez quitté le mode d'insertion.:imap
est que cela fonctionnerait même dans une session ssh à distance ou quand il$DISPLAY
n'est pas défini autrement.Réponses:
Vim a quelque chose comme ça sous la forme de keymaps . De
:help mbyte-keymap
:Seul le verrouillage des majuscules en mode insertion décrit un tel mappage pour l'émulation de la majuscule; comme vous pouvez le voir, le fichier de mappages est similaire à ce que vous décrivez dans votre question.
Vous activez ce paramètre via
:set iminsert=1
ou dynamiquement viai_CTRL-^
. Cela fonctionne également/search
avec l''imsearch'
option.la source
La réponse d'Ingo Karkat semble être exactement la bonne solution et a résolu ma situation. Cependant, voici des instructions un peu plus détaillées pour quiconque vient de commencer avec les fonctions de mappage de langue de vim.
Tout d'abord, vous avez besoin d'un fichier de mappage de langue. Comme dans l'exemple de verrouillage des majuscules, vous voudrez mettre quelque chose comme ceci dans
~/.vim/keymap/dvorak2turkishf.vim
(télécharger mon mappage complet depuis Githu b):Avec cela en place, il reste à configurer des liaisons pour l'activer dans certains cas mais pas dans d'autres. Vous voudrez ajouter quelque chose à votre
~/.vimrc
fichier.Tout d'abord, liez le clavier de recherche à celui d'entrée:
Définissez ensuite le clavier qui sera utilisé pour le mode de saisie dans une autre langue:
Désactivez le mode de saisie alternatif afin que par défaut, il n'y ait aucun changement:
Configurez une commande automatique à exécuter chaque fois que vous quittez le mode d'insertion pour désactiver le commutateur de langue alternative:
Ajoutez des liaisons pour toutes les différentes manières dont vous pourriez vous retrouver dans le mode de saisie dans une autre langue afin que l'utilisation
<leader>
(généralement\
) avant eux active le swtich de la carte de langue avant de basculer:Définissez une couleur de curseur différente lorsque la carte est activée:
Tous ensemble, voici ce qui a changé dans ma config . Enfin, vous êtes en mode insertion, vous pouvez activer et désactiver l'option de carte de langue à l'aide
<ctrl>+^
.la source