Come posso rendere l'apertura di nuove schede predefinita?


10

Quando apro vimcon più file ( vim f1 f2 ...), come posso farlo aprirli direttamente nelle schede, senza usare -p?

Sto cercando di separare il comportamento della shell dal comportamento di vim, rimuovere gli vimalias basati su, ecc. Ecco perché preferirei non usare gli alias, ecc. (Quindi, no -p).

Sono abbastanza sicuro che questo sia stato chiesto su alcuni siti SE (come su SO ). Tuttavia, non sono in grado di giudicare quale sarebbe il modo migliore per farlo, quindi spero anche in una nota sul perché un metodo suggerito è buono.

Per il particolare post SO collegato:

  • la risposta accettata fa tabpagemax=9999. Chiamalo pregiudizio personale, ma vedo che un limite è impostato su un numero elevato e penso che ci sia qualcosa di sbagliato (il modo in cui mi sentirei se vedessi chmod 777).

    :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&vim
    
  • l'altra risposta porta all'apertura di una scheda extra vuota, pur essendo molto più concisa.

    :autocmd VimEnter * argdo tabedit
    

Spero in una risposta che non abbia una scheda aggiuntiva aperta e che non imponga un limite a un valore elevato (o spieghi perché non è una cosa negativa).



@OrangeTux ho pubblicato nello spirito della risposta di Gilles. Ma con il downvote mi chiedo cosa direbbe Gilles a un post che si collega a un post esistente?
Muru,

@Carpetsmoker Non ho visto l'aggiornamento del tuo commento. Un tabpage vuoto non è un grosso problema quando le sessioni tendono a finire con la :qaforza dell'abitudine. Se questo è l'unico vantaggio, andrei con l'altro, dal momento che sembra più semplice.
muru,

3
@muru WWGS? Hai un motivo per pensare che le risposte su Stack Overflow non siano soddisfacenti? In tal caso, spiegalo nella tua domanda. In ogni caso, riassumi le risposte SO nella tua domanda. Se questo porta alla domanda contenente la propria risposta, non pubblicare.
Gilles 'SO- smetti di essere malvagio' il

@Gilles Aggiornato. Non ho pubblicato i comandi reali, pensi che dovrei?
muru,

Risposte:


4

Dopo alcuni esperimenti, ho scoperto che questo è il modo migliore; dovrebbe comportarsi come vim -p:

au VimEnter * if !&diff | tab all | tabfirst | endif

Innanzitutto, tab allapre tutte le voci nell'elenco degli argomenti ( :args) in una scheda. L'elenco degli argomenti è un elenco di file passati a Vim all'avvio. E si tabfirstassicura che la prima scheda sia focalizzata piuttosto che l'ultima (questo è facoltativo).

Non facciamo nulla di tutto questo se &diffimpostato; se lo è, stiamo usando vimdiffo vim -d, dove vogliamo avere 2 finestre e non 2 schede.

In questa risposta ho anche scritto un po 'sull'elenco degli argomenti e tab allche potrebbe essere di interesse.


Alcune note sulle altre soluzioni:

  • tab ballapre una scheda per ogni voce nell'elenco buffer , non nell'elenco argomenti. Il "problema" è che l'elenco buffer può essere salvato nel file viminfo all'uscita e ripristinato all'avvio (se %presente 'viminfo', non abilitato per impostazione predefinita). Quindi, se digiti vim, aprirà quei file. Ritengo che ciò sia indesiderato, anche se posso immaginare che alcune persone lo trovino utile; quindi usa quello che preferisci.

  • set tabpagemax=9999non è richiesto; il valore predefinito è 10e questo dovrebbe andare bene. Puoi aumentarlo nel tuo vimrc se vuoi di più, ma 9999è un numero sciocco. Se lo usi -p, ottieni anche le tabpagemaxschede. Quindi questo dovrebbe rispettarlo. Ricorda che questo aprirà (leggi) un buffer all'avvio, quindi è piuttosto lento.

  • autocmd VimEnter * argdo tabeditè lo stesso modo di dire tab all. Tuttavia, il buffer iniziale non viene cancellato, quindi rimani con quella scheda aggiuntiva ( tab allsostituisce tutte le schede). Per risolvere questo problema, hai bisogno della soluzione alternativa nella risposta di Josh Petrie.


2

Penso che l'aggiunta di qualcosa di simile al tuo .vimrcpossa risolvere i tuoi problemi (nota, tuttavia, che in realtà non lo uso e ho eseguito solo test minimi, in alcuni casi può fare cose strane):

function! OpenArgumentsInTabs()
  ardo tabedit
  if tabpagenr("$") > 1
    tabclose
  endif
endfunction

autocmd VimEnter * call OpenArgumentsInTabs()

Come hai notato, argdo tabeditti lascerà una scheda extra vuota. Quindi puoi semplicemente chiudere automaticamente quella scheda. Tuttavia, non puoi semplicemente invocare tabclosedeselezionato o vim ti darà un errore quando lo avvierai senza argomenti o un singolo file ("non puoi chiudere l'ultima scheda"). Invece, controlla per vedere se il numero totale di schede è maggiore di uno (questo è ciò che $provoca la tabpagenrrestituzione) e solo allora devi chiudere l'ultima scheda.


Detto questo, mi sembra che valga la pena sottolineare che le schede di Vim non sono proprio come le schede di altri editor , ed è qualcosa da tenere a mente quando si considera come utilizzare le schede nel flusso di lavoro (sembra che tu ne sia consapevole, ma io vogliono fare il punto a beneficio dei futuri lettori che potrebbero non farlo in modo che possano prendere le proprie decisioni).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.