2013-05-17 16 views
11

Copia il testo dall'esterno di Vim. ⌘V in altre app incolla il testo senza problemi. In MacVim, non funziona.Impossibile incollare in MacVim

In modalità di inserimento, non viene visualizzato nulla. In modalità normale, ottengo E353: Nothing in register +. Questo succede quando set clipboard=unnamed è acceso o spento.

Stranamente, questo funzionava prima. Cosa c'è che non va?

+1

si fa di solito iniziare * MacVim * attraverso l'interfaccia grafica (ad esempio, il molo, * Finder *, Spotlight, qualche applicazione di avvio) o tramite la riga di comando? Se di solito usi la riga di comando (ad es. 'Mvim'), ripristini l'accesso agli Appunti se esci (non solo chiudi tutte le finestre, ad esempio Comando-Q), quindi riavvia" tramite la GUI "? C'è qualcosa di speciale nell'ambiente da cui si avvia * MacVim *? Per esempio. 'mvim' dall'interno di un pannello * tmux * che non ha usato qualcosa come il mio [programma 'riattaccare-a-user-namespace'] (https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard). –

+0

@ChrisJohnsen Questo è probabilmente il problema. Prenderò uno sguardo presto. Grazie! –

+0

@ChrisJohnsen Grazie! 'riattaccare-a-user-namespace' è eccellente. Hai salvato un sacco di nerd come me. –

risposta

28

Se si utilizza tmux ea volte si avvia inizialmente MacVim tramite il programma mvim da riga di comando, allora si potrebbe essere verificato il problema che mi ha spinto a scrivere il reattach-to-user-namespace command.

La mia ipotesi è che l'accesso appunti lavorato in occasioni precedenti, perché ti è capitato di aver lanciato MacVim attraverso un metodo GUI “normale” (ad esempio il dock, Finder, Spotlight, etc.). Gli Appunti in seguito sono diventati inaccessibili dopo aver chiuso l'istanza precedente di MacVim e riavviato tramite (ad esempio) mvim dall'interno di una sessione tmux.

Il problema di fondo è che i programmi lanciati in determinati contesti (cioè all'interno di una sessione di tmux) finiscono con un ambiente che nega loro l'accesso a determinati servizi (ad esempio la X cartone OS).

iniziale è l'avvio qui. Nuove finestre iniziato da mvim -in- tmux (anche senza il programma wrapper sopra-linked) dovrebbero avere accesso agli appunti finché MacVim è stato precedentemente avviato “tramite la GUI” (forse ci sono ancora un po 'MacVim windows open, o forse hai MacVim configurato per continuare a funzionare anche quando non ci sono finestre aperte). Di conseguenza, per riottenere l'accesso agli Appunti occorrerà chiudere tutte le finestre esistenti MacVim, chiudere l'applicazione, quindi riavviarla in un modo che abbia accesso agli Appunti (ad esempio tramite la GUI o "all'interno" del wrapper) .

Una volta ottenuto il suddetto programma-linked involucro installato (è disponibile tramite MacPorts e Homebrew anche), è possibile utilizzare un comando come reattach-to-user-namespace mvim per garantire che se finisce per iniziare un nuovo MacVim esempio, allora quella nuova istanza avrà accesso agli appunti. Potresti usare un alias, una funzione di shell o uno script per essere sicuro di "avvolgere" sempre mvim.

Diversi altri comandi beneficiano anche di “wrapping” (pbpaste, pbcopy, nohup, launchctl (a seconda di quale sottocomando che si sta utilizzando)), quindi si consiglia di “avvolgere” il tuo guscio intero al posto dei singoli comandi. Il bit dell'ambiente di processo che il "wrapper" modifica è ereditato dai processi figli, quindi "il wrapping" della shell influirà sulla maggior parte dei comandi da esso eseguiti.Se si utilizza tmux, si potrebbe configurare il default-command automaticamente “avvolgere” predefinito tmux conchiglie:

set-option -g default-command "reattach-to-user-namespace -l zsh" 
+0

Come dovrei fare per avvolgere l'intero guscio? –

+1

Se è già stata avviata una shell, è possibile avviare manualmente una nuova shell "avvolta" in questo modo: "exec repltach-to-user-namespace zsh" (è possibile farlo senza 'exec' (ad esempio per scopi di debug) , ma finirai con uno strato aggiuntivo di shell). Per farlo in modo automatico, sarà necessario riconfigurare qualsiasi cosa stia iniziando la shell (ad es. * Tmux *) per usare invece il wrapper (ad esempio tramite 'default-command'); Fondamentalmente, basta aggiungere 'riattacca-a-user-namespace 'come prefisso. –