Domanda

Ho esaminato la possibilità di utilizzare le schede in Vim (con :tabe, :tabnew, ecc.) in sostituzione della mia pratica corrente di avere molti file aperti nella stessa finestra in buffer nascosti.

Vorrei che ogni file distinto che ho aperto fosse sempre nella sua scheda. Tuttavia, ci sono alcune cose che ostacolano questo. Come posso risolvere questi:

  1. Quando comandi come gf e ^] passano a una posizione in un altro file, il file si apre in un nuovo buffer nella scheda corrente. C'è un modo per avere tutti questi tipi di comandi per aprire il file in una nuova scheda o passare alla scheda esistente con il file se è già aperto?

  2. Quando cambio i buffer posso usare :b <part of filename><tab> e completerà i nomi dei file nei buffer esistenti. <part of filename> può persino essere al centro di un nome file anziché all'inizio. Esiste un equivalente per cambiare scheda?

È stato utile?

Soluzione

Stop, stop, stop.

Non è così che le schede di Vim sono progettate per essere utilizzate. In realtà, sono sbagliati. Un nome migliore sarebbe & Quot; viewport & Quot; o " layout " ;, perché è quello che è una scheda & # 8212; è un diverso layout di finestre di tutto dei tuoi buffer esistenti.

Cercare di battere Vim in 1 tab == 1 buffer è un esercizio di futilità. Vim non lo sa o se ne cura e non lo rispetterà su tutti i comandi & # 8212; in particolare, tutto ciò che utilizza il buffer di correzione rapida (:make, :grep e :helpgrep sono quelli che balzano a mente) ignorerà felicemente le schede e non c'è niente che tu possa fare per fermarlo.

Invece:

  • :set hidden
    Se non hai già questo set, allora fallo. Fa funzionare vim come ogni altro editor a più file del pianeta. Puoi avere buffer modificati che non sono visibili in una finestra da qualche parte.
  • Utilizzare :bn, :bp, :b #, :b name e ctrl-6 per passare da un buffer all'altro. Mi piace #ctrl-6 me stesso (da solo passa al buffer utilizzato in precedenza o # passa al buffer numero :ls).
  • Utilizza <=> per elencare i buffer o un plug-in come MiniBufExpl o BufExplorer .

Altri suggerimenti

Arriva in ritardo alla festa qui, ma sorpreso di non aver visto quanto segue in questo elenco:

:tab sball: apre una nuova scheda per ciascun buffer aperto.

:help switchbuf: controlla il comportamento di commutazione del buffer, prova :set switchbuf=usetab,newtab. Ciò dovrebbe significare passare alla scheda esistente se il buffer è aperto o crearne una nuova in caso contrario.

Vim :help window spiega la confusione " tabs vs buffer " abbastanza bene.

  

Un buffer è il testo in memoria di un file.
   Una finestra è una finestra    su un buffer.
  Una scheda è una raccolta di finestre.

L'apertura di più file avviene in vim con buffer . In altri editor (ad esempio notepad ++) questo viene fatto con le schede, quindi la scheda del nome in Vim potrebbe essere fuorviante.

Windows hanno lo scopo di dividere l'area di lavoro e visualizzare più file (buffer) su una schermata. In altri editor questo potrebbe essere ottenuto aprendo più finestre della GUI e riordinandole sul desktop.

Infine, in questa analogia le pagine della scheda di Vim corrisponderebbero a più desktop, ovvero a diversi riarrangiamenti di Windows.

Come spiega vim help: tab-page è possibile utilizzare una scheda, quando si desidera modificare temporaneamente un file, ma non si desidera cambiare nulla nel layout corrente di finestre e buffer. In tal caso, è possibile utilizzare un'altra scheda al solo scopo di modificare quel determinato file.

Ovviamente devi ricordare che la visualizzazione dello stesso file in molte schede o finestre comporterebbe la visualizzazione della stessa copia di lavoro (buffer).

Contrariamente ad alcune delle altre risposte qui, dico che puoi usare le schede come vuoi. vim è stato progettato per essere versatile e personalizzabile, piuttosto che costringerti a lavorare secondo parametri predefiniti. Sappiamo tutti come a noi programmatori piace imporre la nostra & Quot; ethics & Quot; su tutti gli altri, quindi questo risultato è sicuramente una caratteristica principale.

<C-w>gf è l'equivalente della scheda del comando gf dei buffer. <C-PageUp> e <C-PageDown> passeranno da una scheda all'altra. (In Byobu, questi due comandi non funzionano mai per me, ma funzionano al di fuori di Byobu / tmux. Le alternative sono gt e gT.) <C-w>T sposta la finestra corrente in una nuova scheda.

Se preferisci che vim usi una scheda esistente, se possibile, piuttosto che creare una scheda duplicata, aggiungi :set switchbuf=usetab al tuo file .vimrc. È possibile aggiungere newtab all'elenco (:set switchbuf=usetab,newtab) per forzare l'apertura dei comandi di QuickFix che visualizzano gli errori di compilazione in schede separate. Preferisco invece split, che apre gli errori di compilazione in una finestra divisa.

Se il supporto del mouse è abilitato con :set mouse=a, è possibile interagire con le schede facendo clic su di esse. C'è anche un pulsante + per impostazione predefinita che creerà una nuova scheda.

Per la documentazione sulle schede, digitare :help tab-page in modalità normale. (Dopo averlo fatto, puoi esercitarti a spostare una finestra in una scheda usando :help windows.) C'è un lungo elenco di comandi. Alcuni dei comandi della finestra hanno a che fare con le schede, quindi potresti voler consultare anche quella documentazione tramite vim -p file1 file2 ....

Aggiunta: 2013-12-19

Per aprire più file in vim con ogni file in una scheda separata, utilizzare -p. Se sei come me e dimentica sempre di aggiungere vim, puoi aggiungerlo alla fine, poiché vim segue le normali regole di analisi delle opzioni della riga di comando. In alternativa, puoi aggiungere un mapping alias bash da vim -p a <=>.

Ho riscontrato lo stesso problema. Volevo che le schede funzionassero come buffer e non riesco mai a farle funzionare. La soluzione su cui ho finalmente deciso era di fare in modo che i buffer si comportassero come schede!

Guarda il plug-in chiamato Mini Buffer Explorer , una volta installato e configurato, sarai in grado di lavorare con i buffer praticamente allo stesso modo delle schede senza perdere alcuna funzionalità.

Questa è una risposta per coloro che non hanno familiarità con Vim e provengono da altri editor di testo (nel mio caso Sublime Text).

Ho letto tutte queste risposte e non era ancora chiaro. Se li leggi abbastanza, le cose iniziano a dare un senso, ma mi ci sono volute ore per andare avanti e indietro tra le domande.

La prima cosa è, come altri hanno spiegato:

Pagine delle schede , assomigliano molto alle schede , si comportano come schede e assomigliano molto alle schede nella maggior parte degli altri editor di GUI, ma non lo sono. Penso che sia un cattivo modello mentale costruito su Vim, che purtroppo offusca il potere extra che hai in una scheda.

La prima descrizione che ho capito è stata da la risposta di @ crenate è che sono l'equivalente di più desktop. Se visto a questo proposito, avresti sempre solo un paio di desktop aperti ma molte finestre della GUI aperte all'interno di ognuna.

Direi che sono simili ad altri editor / browser:

  1. Raggruppamenti di schede
  2. Aree di lavoro con testo sublime (ovvero un elenco dei file aperti presenti in un progetto)

Quando li vedi in questo modo ti rendi conto della loro potenza che puoi facilmente raggruppare insieme di file (buffer) ad es. i tuoi file CSS, i tuoi file HTML e i tuoi file JS in diverse schede. Il che è davvero fantastico.

Altre descrizioni che trovo confuse

Finestra

Questo non ha senso per me. Un viewport che sebbene abbia un termine del dizionario definito , ho sentito solo riferirsi a Vim windows nel :help window doc. Viewport non è un termine che abbia mai sentito parlare di editor come Sublime Text, Visual Studio, Atom, Notepad ++. In realtà non ne avevo mai sentito parlare per Vim fino a quando non ho iniziato a provare a usare le schede.

Se visualizzi le schede come più desktop, fare riferimento a un desktop come una singola finestra sembra strano.

Aree di lavoro

Questo forse ha più senso, la definizione del dizionario è:

  

Una funzione di archiviazione di memoria per uso temporaneo.

Quindi è come un posto dove si memorizza un gruppo di buffer.

Inizialmente non suonavo come il concetto di Sublime Text di un'area di lavoro che è un elenco di tutti i file che hai aperto nel tuo progetto:

  

il file sublime-workspace, che contiene dati specifici dell'utente, come i file aperti e le modifiche a ciascuno.

Comunque, pensandoci di più, questo in realtà è d'accordo. Se consideri una pagina della scheda Vim come un progetto di testo sublime, allora sarebbe strano avere un solo file aperto in ciascun progetto e continuare a passare da un progetto all'altro. Quindi perché usare una scheda per aprire solo un file è strano.

Collezione di finestre

<=> si riferisce alle schede in questo modo. Inoltre numerose altre risposte usano lo stesso concetto. Tuttavia fino a quando non riesci a capire cosa sia una finestra di VIM, non è molto utile, come costruire un castello sulla sabbia.

Come ho detto sopra, una finestra di vim è la stessa di una finestra e quiete spiegata in modo eccellente in questa rel articolo di linux.com :

  

Una funzione davvero utile in Vim è la possibilità di dividere l'area visualizzabile tra uno o più file, o semplicemente di dividere la finestra per visualizzare più facilmente due bit dello stesso file. La documentazione di Vim si riferisce a questa come finestra o finestra, in modo intercambiabile.

     

Potresti già avere familiarità con questa funzione se hai mai usato la funzione di aiuto di Vim usando: argomento della guida o premendo il tasto F1. Whquando si inserisce la guida, Vim divide la finestra e apre la documentazione della guida nella vista superiore, lasciando il documento aperto nella vista inferiore.

Trovo strano che una scheda sia definita come una raccolta di finestre invece che una raccolta di buffer. Ma suppongo che tu possa avere due diverse schede aperte ciascuna con più finestre tutte puntate sullo stesso buffer, almeno questo è quello che ho capito finora.

Guardando    : schede di aiuto non sembra che VIM voglia lavorare nel modo in cui lo fai ...

I buffer sono condivisi tra le schede, quindi non sembra possibile bloccare un determinato buffer in modo che appaia solo su una determinata scheda.

È una buona idea, tuttavia.

Probabilmente potresti ottenere l'effetto desiderato usando un terminale che supporta le schede, come multi-gnome-terminal, quindi eseguendo istanze vim in ciascuna scheda del terminale. Non perfetto, però ...

  • Puoi mappare i comandi che normalmente manipolano i buffer per manipolare le schede, come ho fatto con gf nel mio .vimrc:

    map gf :tabe <cfile><CR>
    

    Sono sicuro che puoi fare lo stesso con [^

  • Non credo che vim lo supporti per le schede (ancora). Uso gt e gT per passare rispettivamente alle schede successiva e precedente. Puoi anche usare Ngt, dove N è il numero della scheda. Una peeve che ho è che, per impostazione predefinita, il numero di scheda non viene visualizzato nella riga della scheda. Per risolvere questo problema, ho inserito un paio di funzioni alla fine del il mio file .vimrc (non ho incollato qui perché è lungo e non è stato formattato correttamente).

Uso i buffer come le schede, usando il BufExplorer e alcune macro:

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

Con BufExplorer non hai una barra delle schede nella parte superiore, ma d'altro canto consente di risparmiare spazio sullo schermo, inoltre puoi avere un numero infinito di file / buffer aperti e l'elenco dei buffer è ricercabile ...

Se vuoi che i buffer funzionino come le schede, dai un'occhiata al plug-in tabline .

Utilizza una sola finestra e aggiunge una riga in alto per simulare le schede (mostrando solo l'elenco dei buffer). Ciò è emerso molto tempo fa quando le schede erano supportate solo in GVim ma non nella riga di comando vim. Dal momento che funziona solo con i buffer, tutto si integra bene con il resto di vim.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top