Come posso spostare una finestra esistente in una nuova scheda?


151

C'è un modo per prendere una finestra esistente (divisa) e inserirla in una nuova scheda?


Se mai torni a questa domanda, ti preghiamo di cambiare la risposta accettata, quella di DrAI è molto più corretta di quella di Mykola.
martedì

Risposte:


261

Oltre :tabeditall'approccio precedentemente suggerito , un modo più rapido di farlo è (in modalità normale) premere Ctrl- W Shift- T. Ctrl-W è il prefisso generale per un'ampia varietà di comandi di manipolazione delle finestre.

Vedere:

:help Ctrl-W_T
:help Ctrl-W

3
Nota che help Ctrl-W_Tti porta alla voce di aiuto di Ctrl-W_t(lettere minuscole), tuttavia, più in basso nella pagina c'è la Ctrl-W_Tvoce (con la T maiuscola), che dice "Sposta la finestra corrente in una nuova scheda ..."
Rabarberski,

1
@DrAl e come spostiamo una nuova finestra per dividere la finestra?
Ramiz Uddin il

@RamizUddin Non esiste un modo semplice per farlo (poiché non è ovvio in quale finestra si desidera suddividere). Tuttavia, è possibile scoprire il numero di buffer per la pagina della scheda corrente con :echo bufnr("")e utilizzando questo numero è possibile dividere una finestra con :sp #3o :sb 3(supponendo che il numero fosse 3). Potresti essere in grado di trovare alcune mappature o funzioni per semplificare questo.
DrAl,

1
Come si sposta il buffer in una nuova scheda, mantenendo lo stato di annullamento / ripetizione. In altre parole, non voglio aprire lo stesso file in una nuova scheda, voglio letteralmente spostare il buffer in una nuova scheda, quindi la cronologia delle modifiche può essere utilizzata nella nuova scheda. Se non esiste un modo predefinito per farlo, scommetto che è possibile creare un plug-in che aggiunge un nuovo collegamento per fare ciò che scrive la cronologia degli annullamenti nel file di scambio per il nuovo buffer.
trusktr,

2
@trusktr Immagino che l'apertura del buffer in una nuova scheda :sbfunzionerebbe, ma con le versioni recenti di Vim (> = 7.3) puoi anche usare l'annullamento persistente impostando set undodir=/path/to/dirdove / path / to / dir è una directory che hai creato per lo scopo e poi set undofile. Ciò ti consentirà di uscire da vim, quindi riavviare e mantenere comunque lo stato di annullamento / ripetizione.
DrAl,

103

Provare

:tabedit %<CR>

3
Sono solo curioso di sapere perché hai incluso <CR>.
Svizzera,

17
Per lo stesso motivo ho incluso ":". Questa è la combinazione completa di tasti vim in modalità normale e puoi usarla in 'nnoremap' e in 'nmap'
Mykola Golubyev,

6
Funziona anche se non clona / duplica la finestra in una nuova scheda anziché chiuderla prima e quindi aprirla in una nuova scheda. Non un grande affare. Solo qualcosa di cui essere consapevoli.
A-Dubb,

6
Questo non sposta il buffer in una nuova scheda, apre semplicemente lo stesso file in una nuova scheda, ma non avrai la cronologia di annullamento / ripetizione, ecc.
trusktr

5
C-w Tè il modo più veloce di fare la stessa cosa
Dylanthepiguy,

3

Questo sposta il buffer più recente in una nuova scheda e ripristina il buffer precedente nella scheda corrente. Lo uso dopo aver trascinato un nuovo file nel mio Gvim

:sbp |wincmd p| wincmd T

Puoi mapparlo in questo modo su Ctrl-Backspace

:nnoremap <C-BS> :sbp<bar>wincmd p<bar>wincmd T<CR>

funziona particolarmente bene con

:set switchbuf=usetab

0

Ho usato questo che ti dà due funzioni che possono essere associate a una coppia di tasti di scelta rapida o comandi e che funziona in modo abbastanza intuitivo. Sono abbastanza sicuro che offra comportamenti ancora più amichevoli rispetto ad es Ctrl-W_T.

Ad esempio, quando più finestre sono aperte in più schede, l'utilizzo di questa funzione consente di spostare in modo specifico la finestra corrente alla scheda successiva o precedente e se si sposta qualcosa prima o prima dell'ultima scheda, quindi si gira in una scheda completamente nuova.

Ciò significa che se hai 2 schede, ognuna con una singola finestra, quindi spostando la finestra della prima scheda verso destra, la combinerai con la seconda scheda per ottenere una singola scheda con due finestre. Non so quanto sia complicata questa operazione per ottenere usando i comandi tradizionali.

Ciò significa che una singola coppia di comandi di spostamento consente sia di spostare le finestre attorno alle schede, suddividere le finestre in schede (spingendo una finestra fino alla fine) e unire schede separate in finestre all'interno di una singola scheda, praticamente tutto potresti desiderare, a meno della disposizione posizionale (che è un argomento separato e per cui i comandi integrati Ctrl-W+ Shift-HJKLfunzionano bene).

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.