2011-11-22 20 views
15

Ho notato che lo iTerm2 offre la caratteristica molto comoda dell'utilizzo di "Tasto Opzione come + ESC" (o come meta, ma apparentemente è obsoleto).I collegamenti "M-" in vim su iTerm2/Terminale non funzionano

Ho provato entrambi e il tasto opzione funziona come previsto in Bash (modalità set -o emacs) ed Emacs, ma non in Vim. Pertanto, non posso utilizzare alcun binding "M-". Quello che ho trovato è che:

  • se ho impostato l'opzione per "+ ESC", vim appena capisce ESC + tasto, e non ha idea che in realtà dire Meta-chiave.
  • se imposto l'opzione su "meta", i tasti modificati con "opzione" si comportano proprio come senza un modificatore (non so come testare formalmente ciò che vim capisce da una combinazione di tasti che sto digitando).

Le mappature "M-" funzionano perfettamente in MacVim (7.3.53), ma questo è al di fuori di una console e non nell'ambito di questa domanda.

Sono interessato a come far funzionare questi mapping in Vim, sotto iTerm2 o Terminal.

mie specifiche:

  • Mac OS X Lion 10.7.2
  • iTerm2 1.0.0.20111020
  • vim @ 7.3.107_0 + Python26 [se MacPorts]
+2

A volte le persone usano il termine "Meta", con un'interpretazione molto stretta a significare "un Carattere ASCII con il bit alto impostato "; tuttavia, più in generale "Meta" può significare utilizzare il bit più alto o il prefisso con ESC. Presumo dal testo che "Opzione come Meta" significa specificamente "imposta il bit più alto", che è incompatibile con l'uso di una codifica UTF-8 (o altra 8-bit). I moderni emulatori di terminale generalmente sono impostati su UTF-8 e richiedono l'utilizzo del prefisso ESC per "Meta". L'opzione "opzione come meta chiave" di Mac OS X Terminal significa solo "prefisso con ESC". –

+1

http://stackoverflow.com/a/15399297/2355112 ha la soluzione per mappare "Opzione + char" in Mac. – oozzal

risposta

8

I Ho scaricato l'ultimo iTerm2 e ho provato a vedere cosa ha inviato a/cosa è stato stampato da Vim (i<C-v><M-a>) con le seguenti impostazioni:

  • Opzione come Opzione:

    stampe Vim æ che è normale e previsto sulla mia tastiera francese

  • Opzione mentre Meta:

    Vim rimane lì, in attesa di qualcosa accadere. Non viene stampato nulla Se premo Option e a in sequenza, ottengo solo a. Premendo Option e a in qualche ordine casuale è possibile stampare á, che è strano e totalmente inaspettato.

  • Opzione mentre + ESC:

    stampe Vim ^[a che significa "carattere di escape seguito dal carattere di una".

Da questi test risulta che Vim non sarà mai mai ricevere <M-> senza una qualche magia nera ipotetica.

Se bastone con "Opzione mentre + ESC", sembra che si dovrà cambiare tutto la vostra abitudine <M-something> mappature a <Esc>something.Questo potrebbe funzionare ma renderà difficile scrivere qualsiasi tipo di prosa in qualsiasi lingua non inglese.

Quello che faccio io: lascio il tasto Opzione mentre si è in modo da poter digitare caratteri come œ…«» facilmente e utilizzare <Leader> (mappato ,, vedere :help mapleader) per tutti i miei mappature personalizzate.

Alcune persone qui amano prenotarlo per plugin e sostenere un approccio un po 'più semplice e potenzialmente più sicuro.

inoremap <leader>, <C-x><C-o> "my way (copied elsewhere) 
inoremap ,, <C-x><C-o>  "another way 
+1

Precisamente. Vim non ottiene mai alcuna combinazione di ''. Il problema è che ci sono diversi plugin che uso con i collegamenti 'M-', ed è sconveniente fare confusione con i plugin. Forse c'è una patch vim per ingannarlo nella conversione di un 'tasto Esc +' molto veloce in ''? – Dan

+2

Inoltre mi piacerebbe mappare qualcosa come '' e '' per fare ciò che 'Alt + (su | giù)' fa in Eclipse (cioè spostare la linea/le righe oltre la linea sopra/sotto). Se dovessi mappare 'Esc + (j | k)', allora sarebbe un dolore quando esco dalla modalità di inserimento e preme sinceramente uno di quei tasti movimento ... – Dan

+0

Puoi elencare i plugin che hanno bisogno di ''? – romainl

4

ho lasciato la mia chiave di opzione di agire come normale e ha scoperto che Vim li vedeva come <T- binding. Così, per esempio, ho questa impostazione di mappaggio nel mio Vimrc per spostarsi alla fine di una parola quando è in modalità di inserimento:

noremap! <T-Right> <C-o><Right>; 
Problemi correlati