Bagaimana cara memindahkan jendela yang ada ke tab baru?

151

Apakah ada cara untuk mengambil jendela yang sudah ada (split) dan memasukkannya ke tab baru?

Drew Stephens
sumber
Jika Anda kembali ke pertanyaan ini, harap ubah jawaban yang diterima, jawaban DrAI jauh lebih benar daripada jawaban dari Mykola.
gbr

Jawaban:

261

Selain :tabeditpendekatan yang disarankan sebelumnya , cara yang lebih cepat untuk melakukannya adalah (dalam mode normal) untuk menekan Ctrl- W Shift- T. Ctrl-W adalah awalan umum untuk berbagai macam perintah manipulasi jendela.

Lihat:

:help Ctrl-W_T
:help Ctrl-W
DrAl
sumber
3
Catatan yang help Ctrl-W_Takan membawa Anda ke entri bantuan Ctrl-W_t(huruf kecil), namun, lebih jauh ke bawah adalah Ctrl-W_Tentri (dengan huruf kapital T), mengatakan "Pindahkan jendela saat ini ke halaman tab baru ...."
Rabarberski
1
@AlAl dan bagaimana kita memindahkan jendela tab baru ke jendela terpisah?
Ramiz Uddin
@RamizUddin Tidak ada cara sederhana untuk melakukan ini (karena tidak jelas jendela mana yang ingin Anda bagi). Namun, Anda dapat mengetahui nomor buffer untuk halaman tab Anda saat ini dengan :echo bufnr("")dan menggunakan nomor ini Anda dapat membagi jendela dengan :sp #3atau :sb 3(dengan asumsi angka itu 3). Anda mungkin dapat membuat beberapa pemetaan atau fungsi untuk menyederhanakan ini.
DrAl
1
Bagaimana Anda memindahkan buffer ke tab baru, menjaganya agar tetap dalam kondisi undo / redo. Dengan kata lain, saya tidak ingin membuka file yang sama di tab baru, saya ingin benar-benar memindahkan buffer ke tab baru, sehingga riwayat edit dapat digunakan di tab baru. Jika tidak ada cara standar untuk melakukan ini, saya yakin plugin dapat dibuat yang menambahkan cara pintas baru untuk melakukan ini yang menulis sejarah undo ke file swap untuk buffer baru.
trusktr
2
@trusktr Saya membayangkan bahwa membuka buffer di tab baru :sbakan bekerja, tetapi dengan versi terbaru Vim (> = 7.3) Anda juga dapat menggunakan undo persisten dengan menyetel di set undodir=/path/to/dirmana / path / ke / dir adalah direktori yang sudah Anda miliki. dibuat untuk tujuan dan kemudian set undofile. Ini akan memungkinkan Anda keluar dari vim dan kemudian memulai kembali dan masih mempertahankan kondisi undo / redo.
DrAl
103

Mencoba

:tabedit %<CR>
Mykola Golubyev
sumber
3
Hanya ingin tahu mengapa Anda menyertakan <CR> dengan itu.
Swiss
17
Untuk alasan yang sama saya memasukkan ":". Ini adalah kombinasi tombol vim lengkap dalam mode normal dan Anda dapat menggunakan ini di 'nnoremap' dan di 'nmap'
Mykola Golubyev
6
Ini berfungsi juga kecuali itu klon / duplikat jendela ke tab baru sebagai lawan untuk menutupnya terlebih dahulu dan kemudian membukanya di tab baru. Bukan masalah besar. Hanya sesuatu yang harus diperhatikan.
A-Dubb
6
Ini tidak memindahkan buffer ke tab baru, itu hanya membuka file yang sama di tab baru, tetapi Anda tidak akan memiliki undo / redo history, dll.
trusktr
5
C-w Tadalah cara tercepat untuk melakukan hal yang sama
Dylanthepiguy
3

Ini memindahkan buffer terbaru di tab baru dan mengembalikan buffer sebelumnya di tab saat ini. Saya menggunakan ini setelah menyeret file baru ke Gvim saya

:sbp |wincmd p| wincmd T

Anda dapat memetakannya seperti itu ke Ctrl-Backspace

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

kinerjanya sangat baik dengan

:set switchbuf=usetab

sumber
0

Saya telah menggunakan ini yang memberi Anda dua fungsi yang dapat terikat pada sepasang hotkey atau perintah, dan yang berfungsi cukup intuitif. Saya cukup yakin ini menawarkan perilaku yang bahkan lebih ramah daripada misalnya Ctrl-W_T.

Misalnya, ketika beberapa jendela terbuka di banyak tab, menggunakan fungsi ini memungkinkan Anda untuk secara khusus memindahkan jendela saat ini ke tab berikutnya atau sebelumnya, dan jika Anda memindahkan sesuatu ke sebelum tab pertama atau ke setelah tab terakhir, maka itu berubah ke dalam tab yang sama sekali baru.

Ini berarti jika Anda memiliki 2 tab, masing-masing memiliki satu jendela, kemudian memindahkan jendela tab pertama ke kanan akan menggabungkannya dengan tab kedua untuk menghasilkan satu tab tunggal dengan dua jendela. Saya tidak tahu seberapa berbelit-belit operasi ini untuk mencapai menggunakan perintah tradisional.

Artinya, sepasang perintah bergerak memungkinkan untuk menggeser jendela di sekitar tab, memisahkan jendela menjadi tab (dengan mendorong jendela ke ujung) dan menggabungkan tab terpisah ke jendela di dalam tab tunggal, hampir semuanya Anda mungkin ingin, singkat dari pengaturan posisi (yang merupakan topik terpisah dan perintah Ctrl-W+ built in Shift-HJKLberfungsi dengan baik untuk).

Steven Lu
sumber