Come mappare la chiave ALT in .vimrc?


9

Per poter aggiungere righe vuote senza accedere alla modalità di inserimento, sto provando a mappare ALT-oe ALT-Oa o<ESC>eo<ESC>

Ho provato quanto segue nel mio .vimrc

map <M-o> o<ESC>
map <M-O> O<ESC>

e

map <ALT-o> o<ESC>
map <ALT-O> O<ESC>

e (come suggerito di seguito)

map <A-o> o<ESC>
map <A-O> O<ESC>

ma nessuno funziona. Dà solo il solito comportamento, come se ALT-onon fosse stato definito.

Questa è la prima volta che modifico il .vimrcfile e non riesco a trovare dove la documentazione ti dice come designare le varie chiavi. Ma sono in grado di verificare che il mio .vimrcfile venga letto, includendo:

map <Enter> ihello<ESC>

Che si associa con successo <Enter>all'inserimento helloe al ritorno in modalità comando.

Sto usando Vim con Cygwin.


Sembra che il tuo terminale non passi affatto le sequenze alt. Altre sequenze conosciute funzionano? Che ne dici di provare Ctrl? Che terminale stai usando?
Caleb,

Sto usando Vim su Cygwin, ma ho fatto funzionare altri script, come i miei dettagli di modifica.
Eric Wilson,

Ctrl funziona, una specie di. Non mi sembra di distinguere tra <C-o>e <C-O>.
Eric Wilson,

La risposta di Giles è sulla buona strada. È necessario passare definitivamente a un terminale più capace. Questi problemi dovrebbero scomparire e riavrai le chiavi!
Caleb,

Risposte:


10

Per vedere cosa sta inviando il tuo terminale quando premi un tasto, passa alla modalità di inserimento, premi Ctrl+V, quindi il tasto. La maggior parte dei tasti con la maggior parte dei terminali invia una sequenza di escape in cui solo il primo carattere è un carattere di controllo; Ctrl+Vinserisce il carattere successivo letteralmente, in modo da poter inserire l'intera sequenza di escape in quel modo.

Terminali diversi inviano sequenze di escape diverse per alcune combinazioni di tasti. Molti terminali inviano lo stesso carattere ( ^O) per entrambi Ctrl+Oe Ctrl+Shift+O; in tal caso, Vim non sarà in grado di distinguerli.

Dici che stai usando Cygwin; in quale terminale stai eseguendo Vim è l'informazione più pertinente. Se stai utilizzando la console Windows nativa, procurati un terminale migliore. Consiglio MinTTY per eseguire applicazioni in modalità testo Cygwin in un terminale in Windows fuori X, ma anche RXVT e PuTTYcyg nativi di Windows di Cygwin sono buoni. (Anche Console2 per eseguire le applicazioni della console di Windows, ma questo è assolutamente fuori tema qui).


3

Se Control+Vseguito da ALT-xspettacoli ^[x(digita terminale) puoi risolverlo con questo piccolo script da vim.wikia.com :

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

Aggiungi a .vimrc per tutte le mappature dei tasti alt.


1

Questo funziona per me sul terminale Ubuntu 16.04 xfce (e sul terminale ruggine alacritty)

Imposta il trigger dello snippet ultisnip su Meta-/(proprio come lo snippet di emacs)

let g:UltiSnipsExpandTrigger="^[/"

Qui ora ^[/scrivo vim

In modalità inserimento Ctrl-V Alt-/

( Metaè il Alttasto sulla tastiera del mio PC)


-1

Il tasto M (eta) è il pulsante di Windows. È giusto <A-o>.


Anche questo non funziona.
Eric Wilson,

Questo non è sempre il caso, su diversi layout di tastiera e lingue locali sono spesso diversi.
Caleb,

@Caleb c'è qualche documentazione per questo?
Eric Wilson,

Ho provato map <A-o> o<ESC>e ha funzionato per me. Se lo hai inserito nel tuo .vimrc, l'hai ricaricato?
Martin Ueding,

Il richiedente ha già dichiarato nella sua domanda di aver verificato che il file veniva caricato. Questo non è relativo all'utente poiché si trovano su Windows, ma puoi vedere diverse configurazioni dei tasti Meta / Win / Alt nei file geometria / simbolo / codice chiave xkb. Noterai anche nelle opzioni di layout della tastiera gnome che ci sono diversi modi comuni per rimappare tra Alt / Win / Meta. Uno dei motivi per cui esiste è a causa della disparità nei layout di base.
Caleb,
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.