2012-01-06 11 views
5

Io lavoro sempre su più progetti contemporaneamente. La suddivisione del numero di file che ho è la seguenteC'è qualche plugin/modo per gestire più progetti in Vim?

Project | Files 
-------------------------- 
    Thesis   20 
    Simulator  50 
    Plots   30 
    Graphs   30 
    Website  500+ 

Avere tutti questi file in una finestra è macchinoso. Ci sono diverse opzioni, e parlerò dei loro drawbracks, o oserei dire il loro tallone d'Achille.

  1. Split di Windows ho potuto dividere vim in 5 finestre, una per ogni progetto, ma potrebbe anche essere la codifica attraverso un foro stenopeico. In realtà non sono mai stato un fan delle finestre divise, ad eccezione dei casi in cui si confrontano e si modificano costantemente due file correlati. Inoltre, non trovo la navigazione in due dimensioni senza soluzione di continuità solo nella direzione orizzontale.

  2. Tabs Spartiti, o meglio finestre stupidamente chiamati schede, sembrano essere esattamente per questo tipo di problema, ma non forniscono le restrizioni per i buffer da usare. Ad esempio, se sono nella mia scheda Thesis, voglio navigare solo su quei 20 buffer, non su tutti e oltre 500 buffer relativi ai siti web. Poiché sto salvando queste sessioni come sessioni, potrebbe potenzialmente causare problemi se accidentalmente si passa a un buffer website nella mia scheda Thesis, quindi al momento dell'inserimento sono presenti due schede website. Ciò è ulteriormente problematico perché ho impostato le directory locali (:lcd) per ogni scheda.

  3. Terminali Tab L'utilizzo delle schede Terminale garantisce che i buffer in ogni scheda rimangano indipendenti. Tuttavia, ogni sessione di Vim non può più condividere informazioni. Non riesco a strappare il testo da un terminale all'altro (suppongo di poterlo inserire nel registro +). Inoltre non posso più usare :buffdo su tutti i buffer. Inoltre, mi piace il fatto che posso salvare tutte le mie schede vim in una singola sessione.

che conosco così è un anatema per la discussione pubblica, quindi mi sarà invece chiedere se ci esiste un modo per ottenere la funzionalità che sto lottando per.

EDIT Un buon modo per riassumere ciò di cui ho bisogno è di dire che voglio "sub buffer".

EDIT Quello che voglio uscire dalle schede in vim è la possibilità di usarli più efficacemente come sono realmente: i viewport. Voglio potere avere una linguetta esclusivamente per la mia sezione di tesi. In questa sezione cambierò la directory locale per rifletterla. Inoltre, voglio filtrare i buffer in quella tabella solo per essere un sottoinsieme di tutti i buffer. Allo stesso modo nella scheda Simulatore voglio usarlo esclusivamente per i miei file di Simulator.

In sostanza quello che voglio è la possibilità, attraverso le schede, per eseguire più sessioni indipendenti di vim, ma ancora con alcuni dei vantaggi aggiunti (es. Condivisione registra per essere in grado di dare uno strattone)

+5

Non proprio una "soluzione Vim", ma perché non usi uno spazio di lavoro e una istanza vim per progetto? Per passare da un progetto all'altro, è sufficiente passare a un altro spazio di lavoro in cui tutto è impostato nel modo desiderato per quel progetto. – beta

+0

Un sacco di volte prendo risultati dai grafici e li metto in Tesi, poi prendo le formule da Thesis e le inserisco nel Simulatore. Quello che voglio sono i sub buffer. – puk

+1

Non chiamerei 3 persone "un sacco di gente". In realtà non capisco nulla per il tuo flusso di lavoro. Perché fai sempre cd? Perché non alias i tuoi script '* .py' o aggiungi la loro directory al tuo' $ PATH'? O magari fare tutto in una finestra Vim e mappare il tuo script a '' o altro? – romainl

risposta

4

Ho scoperto un modo per farlo. Le schede vim sono quasi inutili. Invece ho usato le schede di Gnome Terminal.

  1. registri globali Per simulare utilizzando registri a livello mondiale, in modo da essere in grado di copia incolla tra le varie istanze di vim, 'pipe' negli appunti di sistema e il registro senza nome insieme aggiungendo la riga set clipboard=unnamedplus al vostro. file vimrc. Questo ha l'effetto di tutte le operazioni di yank/delete ... copiate negli appunti di sistema. Da lì, altri esempi di vim avranno accesso ad esso. Allo stesso modo, qualsiasi copia che si incolla al di fuori di vim, verrà ora memorizzata nel registro senza nome.

  2. Terminale GNOME Tab Scorciatoie Le scorciatoie predefinite per andare alle schede successive e precedenti sono CtrlPg Up e CtrlPg Dn. Da quando uso Maiusck e Maiuscj per il mio prossimo e precedenti buffer, ho mappato Ctrlk e Ctrlj di andare al mio prossimo e precedenti schede. Basta andare al terminal Gnome> Modifica> Scelte rapide da tastiera

  3. Terminale GNOME Tabs scrivere uno script di shell per avviare ogni istanza vim come una nuova scheda terminale. See here for instructions

  4. Vim istanze Infine, per ogni istanza vim salvare un file di sessione :mksession fileName

Non è perfetto (per esempio registratori di nome non possono essere copiati ai morsetti), ma è, a mio opinione, molto più rappresentativo di ciò che un viewport (qui chiamato 'schede') dovrebbe fare.


EDIT Ho effettivamente tornato ad usare le schede vim.Ho imparato script di Vim, e mappato le mie chiavi in ​​modo MaiuscJ e MaiuscK mappa per precedenti/successivi buffer e CtrlJ e CtrlK mappa per schede precedente/successivo. Quindi ho scaricato lo script tabname in modo da poter impostare nomi di tabulazione significativi, quindi modificato la creazione di sessioni vim per salvare i nomi delle schede (vedere here), quindi passare da gVim a Vim in modo da poter utilizzare la modalità a schermo intero. È stato un viaggio lungo e arduo, ma mi piacerebbe pensare che ne valesse la pena.

1

Sono d'accordo con ehamberg .

I buffer di Vim sono globali, quindi qualsiasi raggruppamento o suddivisione sembrerà funzionare solo per alcuni minuti e in realtà si interromperà alla prima occasione.

Utilizzare invece un'istanza Vim per ogni progetto. Se hai davvero bisogno di condividere qualcosa puoi sempre usare gli appunti del sistema.Prova a set clipboard+=unnamedplus per sincronizzare il registro predefinito di Vim con gli appunti di sistema.

ma mi chiedo se il vostro modo di gestire progetti è razionale:

  • Al punto 3 si scrive "Ho anche non può più utilizzare: buffdo su tutti i buffer.". Perché dovresti usare un comando che funziona su tutti i buffer aperti su più progetti diversi?

  • Avete seriamente più di 500 buffer aperti contemporaneamente? So che Vim può probabilmente gestirlo, ma perché apri tanti buffer? Realizzo web per vivere e raramente lavoro su più di una dozzina di file in un dato giorno, anche su progetti "grandi".

+0

wrt bullet 1: sono in quella zona grigia dove sono in qualche modo correlati: la mia tesi genera risultati che sono plottati, quindi prendo parte prova il codice da questi grafici e ricollegalo alla mia tesi, allo stesso modo, uso il codice della mia tesi nel mio simulatore – puk

+0

wrt bullet 2: ho capito che il mio computer è in grado di gestirlo = P Ma riconsidererò il mio approccio. – puk

+0

Quello che voglio è in ogni scheda (eccetto la scheda del sito Web) per poter eseguire ': bn' (mappato a' Shift + J') per scorrere i file invece di scorrere tra 600+ file – puk

1

Il plug-in BufExplorer può raggruppare i buffer in base alla scheda. Il plugin CtrlP può riutilizzare il buffer da un'altra scheda.

+0

C'è anche un vimscript fatto in casa https://github.com/DXist/dotvim/blob/master/after/plugin/lighthouse.vim che uso per raggruppare i progetti per schede. Gestisce il progetto per ogni scheda e buffer. I progetti sono configurati nel file .vim/projects.vim. –

1

Stavo usando più istanze di Vim per lavorare contemporaneamente con diversi progetti ma non era soddisfacente. Ho finito per avere molte schede aperte nel mio terminale.

Ho utilizzato vim-rooter, che è un semplice plug-in che cambierà automaticamente la directory di lavoro nella root di progetto del buffer aperto, a condizione che esista una directory .git nella root del progetto. Verrà attivato solo aprendo i file con determinate estensioni, ma tale elenco può essere personalizzato. Funziona con ctrlp e qualsiasi altro plugin.

1

Ho questo stesso problema da molto tempo, lavorando allo stesso tempo con diversi progetti.

Per risolvere parzialmente questa frustrazione, ho utilizzato questo plug-in https://github.com/xolox/vim-session.

vim-session facilita la navigazione tra le sessioni e in ogni sessione abbiamo un progetto. Dopo averlo usato alcune settimane, sono diventato frustrato perché ha bisogno ogni volta che è necessario passare, tutte le modifiche dei file della sessione corrente devono essere salvate.

La soluzione migliore per me ora è Spacemacs con la modalità Vim. Mi piace molto lo spirito di editing offerto da Vim e l'esperienza è la stessa con Spacemacs + una migliore gestione dei progetti + una migliore integrazione con git.

Problemi correlati