Bagaimana cara mengedit buffer yang ada di tab baru di vim?
51
Misalkan saya sudah mulai vim seperti ini:
vim foo bar
Sekarang saya memutuskan bahwa saya ingin masing-masing file di tab sendiri. Apakah ada cara untuk melakukan itu tanpa keluar vim dan menambahkan -popsi ke baris perintah saya?
Banyak dari Anda mungkin mencari tabe %yang disebutkan dalam jawaban liuyang1 di bawah ini.
Mateusz Piotrowski
1
@MateuszPiotrowski Seperti yang saya sebutkan di komentar ini untuk jawaban itu , :tabe %tidak bekerja dengan buffer yang tidak memiliki filepath yang valid. :tab sbbekerja setiap saat.
JoL
Jawaban:
30
Ketika Anda memulai vim seperti itu, Anda tidak mendapatkan klien vim, editor teks menggunakan terminal atau cmd prompt - dua file berada dalam dua buffer yang berbeda. Gunakan :lsuntuk membuat daftar buffer:
:ls
1 %a "foo" line 6
2 "bar" line 0
% A adalah buffer aktif. Anda dapat menggunakan :b2untuk beralih ke buffer 2 atau gunakan :bnuntuk siklus ke yang berikutnya atau :bpsebelumnya. Saya lebih suka (CTRL-W v) untuk membagi windows secara vertikal, daripada (CTRL-W), yang membelah secara horizontal.
Jika Anda memiliki 2 file yang dimuat & tanpa tab (belum), Anda bisa, :tabnewdan dalam jenis tab baru:b2
Jika Anda ingin selalu memiliki buffer dimuat ke dalam tab mereka sendiri, lihat artikel ini .
Jadi Anda sudah mulai vim dengan cara Anda memiliki file di klien vim, bukan di shell cmd / terminal?
DaveParillo
1
Saya tidak yakin apa yang Anda maksud. Saya menggunakan shell untuk memulai vim seperti dijelaskan di atas dan kemudian saya menjalankan vim.
innaM
Ah! Saya kira saya tidak pernah benar-benar mengerti bahwa buffer bukan lokal untuk tab. Saya selalu berpikir (tanpa berpikir banyak) bahwa setiap tab memiliki daftar penyangga sendiri.
innaM
Di mesin saya, vimakan meluncurkan editor di dalam shell. Untuk mendapatkan antarmuka pengguna grafis vim yang harus saya gunakan gvim. Dan Anda benar - buffer bersifat global untuk aplikasi vim.
DaveParillo
47
Anda ingin membuka buffer di tab baru?
Pisahkan layar (Ctrl-W), ambil jendela, dan Ctrl-W T
Hmm. Tidak persis apa yang ada dalam pikiran saya, tetapi tidak buruk untuk memulai. Saya belum tahu tentang Ctrl-w Titu. Tentu saja, tab pertama masih akan memiliki dua buffer seperti itu.
innaM
Tidak. Setelah Anda membagi layar menjadi dua jendela, dan membuka salah satunya di tab baru, itu akan hilang dari tab pertama. Itu tidak akan tetap (setidaknya tidak pada gvim72 saya). Sejauh buffer pergi, mereka tidak terhubung ke windows / tab ... mereka lebih seperti memori di mana vim menyimpan konten file.
Rook
Ah! Kamu benar. Saya salah mengartikan output dari :ls.
innaM
Juga, ctrl-w V membagi jendela secara vertikal.
Shannon Nelson
1
CTRL-w v adalah perintah yang benar untuk memisahkan windows secara vertikal
JRM
27
Anda dapat melakukannya dengan menggabungkan tabperintah dengan sb[uffer]perintah.
Pertama, Anda harus mengetahui id buffer dari buffer yang ingin Anda buka di tab baru. Anda dapat mengetahui ini dengan lsperintah:
:ls
1 %a "foo" line 1
2 "bar" line 0
Setelah memiliki id, Anda dapat dengan mudah membukanya di tab baru menggunakan:
:tab sb 2
The sbperintah biasanya membuka buffer yang diberikan di jendela perpecahan baru, tetapi tabperintah menyebabkannya untuk membuka di tab baru, sebagai gantinya.
The tabPerintah juga memungkinkan Anda untuk menentukan di mana dalam daftar tab tab baru harus dibuat. Misalnya, :0tab sb 2akan menghasilkan tab 'bilah' baru yang muncul di awal daftar alih-alih setelah tab saat ini.
Anda tidak memerlukan nomor buffer, berikan bagian yang tidak ambigu dari nama buffer dan VIM mengerjakan sisanya untuk Anda.
hidangan penutup
1
Inilah jawaban yang saya cari dan butuhkan. Saya kecewa ketika :tab buffer part-of-nametidak membuka tab baru! Tetapi :tab sb part-of-namebekerja seperti pesona. Terima kasih!!!!
Sukima
Ini bukan pertanyaan persis OP, tetapi persis apa yang saya cari :)
jackcogdill
25
Cara yang lebih baik untuk mencapai apa yang diminta OP adalah:
:bufdo tab split
Ini akan membuka setiap buffer ke dalam tabnya sendiri, tidak peduli berapa banyak. Jika Anda sering menggunakan ini, mudah untuk membuat pemetaan di .vimrc Anda. Dikombinasikan dengan sesuatu seperti plugin vim kecil ini , yang berikut ini akan membuka setiap item dari :grep(atau : Ack ) di tabnya sendiri:
:grep foo
:QuickFixOpenAll
:bufdo tab split
Tentu saja, ketika beralih ke plugin itu akan cukup mudah untuk memodifikasinya untuk membuka konten daftar perbaikan cepat langsung ke tab.
UPDATE : Saya benar-benar harus memberikan teriakan untuk komentar ggustafsson di bawah ini. Jauh dan jauh, jawaban terbaik dari semuanya dan dengan indah menggambarkan kecenderungan Vim terhadap perilaku komposisi. Sarannya adalah:
:tab sball
Sebaiknya mencari bantuan Vim untuk : tab dan : sball untuk melihat apa yang terjadi di sini.
Pendekatan serupa dari suntingan sebelumnya, untuk anak cucu, adalah :bufdo execute "tabnew %". Saya pikir pendekatan baru sedikit lebih jelas.
John Whitley
Satu peringatan: jika buffer awal di vim tidak kosong, ini tampaknya membuka buffer terakhir dua kali. Saya akan memposting pembaruan jika saya menemukan perbaikan sederhana.
John Whitley
12
:tab sballtampaknya bekerja lebih baik.
ggustafsson
6
1. Buka dua file di Vim.
$ vim foo bar
2. Periksa jumlah buffer.
: ls
1% a "foo"
2 "bar"
3. Rantai dua perintah: tabnewuntuk membuka tab baru dan b <buffer_number>memuat buffer yang diinginkan di tab.
Masalah dengan langkah 3 adalah pertama kali membuat tab baru dengan buffer kosong, dan kemudian membuka buffer 2, menghasilkan buffer tanpa judul tambahan dalam daftar buffer. Lebih baik digunakan:tab sb 2
rkjnsn
1
@rkjnsn Anda harus memposting itu sebagai jawaban - sebaiknya jawab pertanyaan 'bagaimana cara mengedit buffer yang ada di tab baru di vim?'
JonnyRaa
1
@JonnyLeeds selesai.
rkjnsn
4
Tambahkan saja beberapa hal yang tidak disebutkan orang lain.
jendela saat ini ke tab baru
Jika memiliki banyak jendela, <C-W>Takan memindahkan jendela ini ke tab baru. Namun, pintasan ini hanya untuk "Jendela", bukan "penyangga". Jika memilih gaya ini, :spatau <C-W>suntuk menduplikasi buffer saat ini ke satu jendela lagi, maka <C-W>Tuntuk memindahkannya ke tab baru.
4 penekanan tombol atau 7 penekanan tombol.
buffer saat ini ke tab baru
:tabe % untuk membuka tab baru untuk buffer saat ini.
7 penekanan tombol.
buffer ke tab baru
Jika menggunakan plugin CtrlP, juga bisa menggunakan "CtrlPBuffer", lalu dengan <C-t>pintasan untuk membukanya dengan halaman tab baru. Gaya ini, mudah untuk beralih ke buffer yang berbeda.
Dengan pintasan "CtrlPBuffer", 4 penekanan tombol atau lebih.
:tabe %adalah apa yang sudah lama saya cari, terima kasih!
pevik
Tidak, :tabe %tidak benar-benar membuka tab baru untuk buffer saat ini. Apa yang terjadi adalah yang %diperluas ke filepath dari buffer saat ini dan :tabemembuka path itu. Vim akan melihat Anda mencoba membuka file yang sudah Anda buka dan akan menggunakan kembali buffer yang Anda miliki. Ini berarti bahwa ini tidak berfungsi dengan buffer yang tidak memiliki filepath. Jika Anda membuka file baru dengan :newdan Anda belum menyimpannya, Anda tidak dapat meletakkannya di tab baru dengan ini. Perintah sebenarnya yang Anda butuhkan adalah apa yang rkjnsn masukkan dalam jawaban mereka: :tab sb %atau lebih pendek::tab sb
tabe %
yang disebutkan dalam jawaban liuyang1 di bawah ini.:tabe %
tidak bekerja dengan buffer yang tidak memiliki filepath yang valid.:tab sb
bekerja setiap saat.Jawaban:
Ketika Anda memulai vim seperti itu, Anda tidak mendapatkan klien vim, editor teks menggunakan terminal atau cmd prompt - dua file berada dalam dua buffer yang berbeda. Gunakan
:ls
untuk membuat daftar buffer:% A adalah buffer aktif. Anda dapat menggunakan
:b2
untuk beralih ke buffer 2 atau gunakan:bn
untuk siklus ke yang berikutnya atau:bp
sebelumnya. Saya lebih suka (CTRL-W v) untuk membagi windows secara vertikal, daripada (CTRL-W), yang membelah secara horizontal.Jika Anda memiliki 2 file yang dimuat & tanpa tab (belum), Anda bisa,
:tabnew
dan dalam jenis tab baru:b2
Jika Anda ingin selalu memiliki buffer dimuat ke dalam tab mereka sendiri, lihat artikel ini .
sumber
vim
akan meluncurkan editor di dalam shell. Untuk mendapatkan antarmuka pengguna grafis vim yang harus saya gunakangvim
. Dan Anda benar - buffer bersifat global untuk aplikasi vim.Anda ingin membuka buffer di tab baru?
Pisahkan layar (Ctrl-W), ambil jendela, dan Ctrl-W T
sumber
Ctrl-w T
itu. Tentu saja, tab pertama masih akan memiliki dua buffer seperti itu.:ls
.Anda dapat melakukannya dengan menggabungkan
tab
perintah dengansb[uffer]
perintah.Pertama, Anda harus mengetahui id buffer dari buffer yang ingin Anda buka di tab baru. Anda dapat mengetahui ini dengan
ls
perintah:Setelah memiliki id, Anda dapat dengan mudah membukanya di tab baru menggunakan:
The
sb
perintah biasanya membuka buffer yang diberikan di jendela perpecahan baru, tetapitab
perintah menyebabkannya untuk membuka di tab baru, sebagai gantinya.The
tab
Perintah juga memungkinkan Anda untuk menentukan di mana dalam daftar tab tab baru harus dibuat. Misalnya,:0tab sb 2
akan menghasilkan tab 'bilah' baru yang muncul di awal daftar alih-alih setelah tab saat ini.sumber
:tab buffer part-of-name
tidak membuka tab baru! Tetapi:tab sb part-of-name
bekerja seperti pesona. Terima kasih!!!!Cara yang lebih baik untuk mencapai apa yang diminta OP adalah:
:bufdo tab split
Ini akan membuka setiap buffer ke dalam tabnya sendiri, tidak peduli berapa banyak. Jika Anda sering menggunakan ini, mudah untuk membuat pemetaan di .vimrc Anda. Dikombinasikan dengan sesuatu seperti plugin vim kecil ini , yang berikut ini akan membuka setiap item dari
:grep
(atau : Ack ) di tabnya sendiri:Tentu saja, ketika beralih ke plugin itu akan cukup mudah untuk memodifikasinya untuk membuka konten daftar perbaikan cepat langsung ke tab.
UPDATE : Saya benar-benar harus memberikan teriakan untuk komentar ggustafsson di bawah ini. Jauh dan jauh, jawaban terbaik dari semuanya dan dengan indah menggambarkan kecenderungan Vim terhadap perilaku komposisi. Sarannya adalah:
Sebaiknya mencari bantuan Vim untuk : tab dan : sball untuk melihat apa yang terjadi di sini.
sumber
:bufdo execute "tabnew %"
. Saya pikir pendekatan baru sedikit lebih jelas.:tab sball
tampaknya bekerja lebih baik.1. Buka dua file di Vim.
2. Periksa jumlah buffer.
3. Rantai dua perintah:
tabnew
untuk membuka tab baru danb <buffer_number>
memuat buffer yang diinginkan di tab.sumber
:tab sb 2
Tambahkan saja beberapa hal yang tidak disebutkan orang lain.
Jika memiliki banyak jendela,
<C-W>T
akan memindahkan jendela ini ke tab baru. Namun, pintasan ini hanya untuk "Jendela", bukan "penyangga". Jika memilih gaya ini,:sp
atau<C-W>s
untuk menduplikasi buffer saat ini ke satu jendela lagi, maka<C-W>T
untuk memindahkannya ke tab baru.4 penekanan tombol atau 7 penekanan tombol.
:tabe %
untuk membuka tab baru untuk buffer saat ini.7 penekanan tombol.
Jika menggunakan plugin CtrlP, juga bisa menggunakan "CtrlPBuffer", lalu dengan
<C-t>
pintasan untuk membukanya dengan halaman tab baru. Gaya ini, mudah untuk beralih ke buffer yang berbeda.Dengan pintasan "CtrlPBuffer", 4 penekanan tombol atau lebih.
sumber
:tabe %
adalah apa yang sudah lama saya cari, terima kasih!:tabe %
tidak benar-benar membuka tab baru untuk buffer saat ini. Apa yang terjadi adalah yang%
diperluas ke filepath dari buffer saat ini dan:tabe
membuka path itu. Vim akan melihat Anda mencoba membuka file yang sudah Anda buka dan akan menggunakan kembali buffer yang Anda miliki. Ini berarti bahwa ini tidak berfungsi dengan buffer yang tidak memiliki filepath. Jika Anda membuka file baru dengan:new
dan Anda belum menyimpannya, Anda tidak dapat meletakkannya di tab baru dengan ini. Perintah sebenarnya yang Anda butuhkan adalah apa yang rkjnsn masukkan dalam jawaban mereka::tab sb %
atau lebih pendek::tab sb