Mappatura del tasto Alt sinistro in Vim?


12

Sono in grado di mappare la combinazione di tasti Right Alt+ Left Arrowcon <a-left>o con <m-left>. Ma non sono in grado di mappare la Left Altchiave.

C'è un modo per farlo?

Modifica:
solo per chiarezza <a-left>significa Alt+ Left Arrow.
La domanda importante qui è qual è la differenza tra Left Alte Right Altdal punto di vista dei keymappings in Vim?

Risposte:


14

Se lo fai :help key-notationin vim, vedrai che gli unici modificatori che Vim riconosce sono shift, control, alt / meta (trattati come sinonimi) e il tasto comando Mac. Puoi facilmente usare xmodmap per mappare la tua chiave alt destra su un nuovo modificatore che Vim riconosce, ma forse nessuno di quei modificatori non è attualmente inutilizzato da te. (Non so se sia possibile far sì che i sistemi Linux rappresentino il modificatore della chiave di comando per Mac come lo vede Vim.) Ci sono altri modificatori che X riconosce: Mod4, Hyper e così via, ma sembra che Vim abbia appena vinto ' non li vedi o almeno non riesci a vincolarli.

Un'altra opzione è quella di far sì che RightAlt-Left Arrow generi una sequenza di tasti specifica, ad esempio Esc- [MyUniqueGarbageHere. Questo è certamente fattibile, e quindi potresti dire a Vim di legarlo a qualsiasi azione ti piaccia, che è diversa dalla chiave alt sinistra a cui è legato. L'aspetto negativo di questo è che è necessario farlo individualmente per ciascuna combinazione RightAlt + Key. Ma se vuoi farlo solo per alcune chiavi, è molto fattibile.

Il modo esatto in cui lo implementerai dipenderà dal fatto che tu stia parlando dell'utilizzo di Vim in X o in una console Linux o in qualche altro ambiente. Suppongo che stai parlando di usarlo in X.

  1. Usa xmodmap per associare RightAlt, diciamo, a Mod3. Organizzare che venga eseguito una volta all'avvio della sessione X. Alcune distribuzioni hanno già un file / etc / X11 / xinit / xinitrc che caricherà i file in posizioni specifiche contenenti comandi xmodmap.

    xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R"
    
  2. Uso il terminale urxvt. Permette di definire le combinazioni di tasti in un file di tipo Xresources. Potresti farlo in ~ / .config / Xresources; Lo faccio in ~ / .config / app-defaults / URxvt. Metterei una linea come questa in quel file (la sintassi esatta è sensibile al file in cui la metti):

    URxvt.keysym.Mod3-Left:    \033<RAlt-Left>
    

    Ora avvia un nuovo terminale, digita ctrl-V quindi digita RightAlt + Left. Dovresti vedere dalla riga di comando i caratteri ^ [[<RAlt-Left>. Funziona? Buona.

  3. Nel tuo ~ / .vimrc, inserisci questo:

    set t_Ff=^[<RAlt-Left>
    

Il '^ [' qui è un singolo carattere di escape. Ciascuno degli altri caratteri ('<', 'R', 'A', ecc.) Sono essi stessi. Usa il prefisso chiave "letterale" di vim, seguito da una escape, per inserire '^ [' (dimentico cosa è la chiave "letterale" per impostazione predefinita --- anche ctrl-V, forse?) T_Ff è solo una voce terminale inutilizzata . Un altro è t_Fg. Puoi usare :set termcapin vim per vedere quali voci del terminale sono assegnate e usare t_XX per alcuni XX che non sono in uso. Segui la linea .vimrc presentata sopra con queste successive:

    map <t_Ff> whatever-vim-keys-you-want-it-mapped-to
    map! <t_Ff> whatever-vim-keys-you-want-it-mapped-to

È anche possibile fare direttamente:

    map ^[<RAlt-Left> whatever-vim-keys-you-want-it-mapped-to

Tuttavia, ho trovato la tecnica che utilizza una voce terminale inattiva per funzionare in modo molto più affidabile.

Ho fatto molte ipotesi qui: che stai usando Linux, X e così via. Se stai usando un programma terminale diverso da urxvt, potrebbe o meno fornire tecniche di associazione dei tasti abbastanza potenti per fare ciò che ho descritto. Se scegli chiavi meno esotiche, potresti comunque essere in grado di fare qualcosa come ho descritto qui. Ad esempio, è possibile disporre che RAlt-Left sia associato a F21 e quindi passare da lì. Facci sapere quali sono le tue esigenze.


Questo vale anche per gvim?
Glifo

L'ho trovato particolarmente utile. Uso lxterminal e voglio mappare il mio tasto alt in vim. Nel terminale, quando ho digitato Ctrl-V e poi la combinazione di tasti desiderata (Alt-T, per esempio), è stato escluso ^ [t. Ho usato questo nel mio .vimrc invece di <At> per eseguire il mapping (^ [ovviamente essendo il singolo carattere di escape) ed è stato eseguito in modo impeccabile. (^ [^ T inoltre lega correttamente Ctrl + Alt + T)
elynnaie
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.