Ho desideri simili ai tuoi. Ho risolto il problema utilizzando un modificatore a livello di sistema: re-bind del tasto.
(Naturalmente, questo è un casino, ma trovo che valga la pena mantenere il mio ibrido formato da MacVim di controlli OS-wide (salva, nuovo, copia, incolla) all'interno della riga di comando vim
s.)
Ecco come l'ho fatto:
- Installa Karabiner , che è un molto , un programma molto potente (e una parte essenziale di
di qualsiasi installazione di OS X di poweruser / programmatore, IMHO)
-
Abilita "Command_L a Control_L (solo nel terminale)" :
-
Map ^ -prefixed controlla i comandi di MacVim più utilizzati in linea di comando vim
. Ad esempio, per supportare ⌘S ,
noremap <silent> <C-S> :update<CR>
vnoremap <silent> <C-S> <C-C>:update<CR>
inoremap <silent> <C-S> <C-O>:update<CR>
-
Ripristina le ⌘ previste per la stessa app Terminal.app, inserendole in modo speciale in Preferenze di Sistema. Ad esempio, se vuoi ⌘N per controllare ancora le schede del Terminale, invece di mapparlo su vim
file, prova:
Ora, tutto ciò che non aggiungi in questo elenco, verrà passato da verbatim a riga di comando vim
(e, naturalmente, qualsiasi altro programma da riga di comando che usi).
Avvertimenti
Questo approccio ha diversi ulteriori aspetti negativi, che voglio hilight per chiunque pensi di prenderlo (come faccio io):
-
⌘␣ non verrà più mappato a Spotlight a livello di sistema. (Ho un numero aperto su Karabiner, e tornerò qui una volta che avrò una soluzione di stopgap.)
- Per ragioni che non riesco a verificare, anche con le esclusioni ^ W impostate in Preferenze di Sistema, il comportamento di chiusura di Tab di Terminal.app cambia con questa impostazione: ⌘W chiuderà le singole schede in una finestra; ma se la scheda corrente è la scheda ultima , non chiude la finestra. Invece, non ha alcun effetto. Ho dovuto riprogrammare me stesso per usare ⇧⌘W per chiudere la finestra se è rimasta una sola scheda.
- Se ti sei allenato a usare ^ V in MacVim per fare la selezione a blocchi, dovrai allenarti di nuovo ad usare l'alternativa , ^ Q (o, ora, ⌘Q ). Inoltre, dovrai aggiungere
stty -ixon
nello script di avvio della shell, come ^Q viene consumato di default per preformare una funzione di controllo shell arcaica (una senza utilizzo moderno).
Comportamento alternativo ⌘W
Oltre a quanto sopra, ho deciso di sovrascrivere ulteriormente ⌘W come chiave universale "chiudi questo", applicabile a più applicazioni.
Invece di mappare ⌘W in "Chiudi scheda", come sopra; Personalmente lo mapperò a ⇧⌘W (per mantenere la semantica "close close this tab"). Quindi, in ogni programma dato, mappo ^W in una sorta di chiusura -salva la funzionalità di uscita.
Ad esempio, nel mio .vimrc
:
noremap <C-W> :confirm quit<CR>
vnoremap <C-W> <C-C>:confirm quit<CR>
inoremap <C-W> <C-O>:confirm quit<CR>
... o my .zshrc
:
function close_tab { exit }
zle -N close_tab_widget close_tab
bindkey '' close_tab_widget
bindkey -M vicmd '' close_tab_widget
Con questi due snippet e il tuo Terminale configurato su "Chiudi se la shell esce in modo pulito", una serie di ⌘W s prima uscirà da vim e quindi chiuderà interamente la shell.
Inoltre, ora è possibile preservare la funzionalità on-exit aggiuntiva dei programmi: ad esempio, vim
chiederà prima di uscire se i file non sono salvati (proprio come MacVim); e zsh
chiederà prima di uscire se ci sono lavori in background.
Postscript: non direttamente relativo alla tua domanda; ma dovresti anche controllare 'Ubiquitous Vim Mode' in Karabiner. È "un po 'troppo" per me da usare tutti i giorni, ma è un'idea fantastica, e sorprendentemente ben implementata.