Jika saya menggunakan:
:tabedit file1 file2
Saya mendapat:
E172: Only one file name allowed
Apakah ada cara untuk digunakan :tabedit
dengan banyak nama file? Atau cara lain untuk membuka banyak tab sekaligus?
tabbed-user-interface
Martin Tournoij
sumber
sumber
:args *.c | tab all
. Pertanyaan lain lebih populer daripada ini, jadi ada baiknya untuk menautkannya juga.Jawaban:
Mengingat masalah & kompleksitas dalam jawaban saya yang lain menggunakan cara "bawaan" dengan mengubah daftar argumen, saya menambahkan fungsi kecil sendiri untuk melakukan ini:
Anda sekarang dapat menggunakan
:Tabedit *.vim
. Fungsi ini akan memperluas semua pola globbing, dan mengeksekusi:tabedit <f>
untuk setiap file. Anda dapat menambahkan banyak nama path yang Anda inginkan, misalnya ini semua berfungsi:Nah, dan sebagainya ...
Saya menempatkan ini dalam sedikit globedit.vim plugin, yang juga berisi perintah untuk
:Edit
,:Split
, dllsumber
[<f-args>]
sebagai ganti"<args>"
- dengan cara itu,pattern
parameter akan menjadi Daftar (array) dan Anda tidak perlu berurusan dengan membelah string secara manual. (2) Lulus bukan-nol sebagai argumen ketigaglob()
agar ia mengembalikan Daftar. Maka Anda dapat menghindari membelah secara manual di sana juga. Anda harus lulus0
sebagai argumen kedua untuk melewati itu tanpa mempengaruhi perilaku:glob(l:p, 0, 1)
.Sejauh yang saya tahu, satu-satunya cara untuk melakukan ini adalah:
Pertama,
:args
akan mengganti daftar argumen. Daftar argumen mencantumkan file yang dibuka dengan Vim; sehinggavim file1 file2
berarti bahwa daftar argumen mengandungfile1
danfile2
.Kami dapat memodifikasi ini saat runtime, dan Vim akan membuka buffer untuk setiap entri baru dalam daftar argumen.
Lihat
:help argument-list
untuk informasi lebih lanjut.The
:all
perintah membuka jendela untuk setiap entri dalam daftar argumen,:tab
perintah mengeksekusi perintah, dan membuka tab baru ketika perintah diberikan akan membuka jendela baru.Peringatan
Ada beberapa peringatan untuk metode ini.
Pertama-tama, tidak ada pemeriksaan untuk duplikat, sehingga Anda dapat berakhir dengan 2 tab atau lebih untuk buffer yang sama.
Tetapi masalah terbesar adalah bahwa ia mengganti semua tab Anda dengan apa yang ada dalam daftar argumen; jadi Anda kehilangan semua tab yang ada.
Anda dapat sedikit menghindari ini dengan menggunakan
:argadd *.vim
untuk menambah daftar argumen, alih-alih menggantinya; tapi perintah seperti:edit
atau:tabedit
tidak tidak mengubah daftar argumen, dan Anda akan kehilangan tab tersebut kecuali jika Anda menambahkan mereka ke daftar argumen (Anda masih memiliki mereka dalam daftar penyangga, meskipun). Anda mungkin juga tidak ingin membuka semua yang ada di daftar argumen Anda di sebuah tab, mungkin Anda hanya ingin membuka 2 file sebagai tab tambahan.Anda mungkin bisa membuat ini sedikit lebih baik dengan pertama-tama menambahkan semua tab yang saat ini terbuka ke daftar argumen (yang saya tidak dapat benar-benar bekerja), tetapi ini masih jauh dari sempurna. Jika tab memiliki 2 atau lebih windows, ia masih akan memodifikasinya ...
sumber
:argdo tabedit %
, yang membuka tab baru untuk setiap argumen. Dimulai dengan satu tab dan membuka n yang baru secara alami akan meninggalkan Anda dengan n +1 tab.:tab all
adalah solusi yang jauh lebih baik.Anda bisa menggunakan
:next
perintah, misalnya:atau:
sumber
:args *.vim
? Setidaknya, berperilaku sama, dan:help next_f
mendokumentasikannya sama ...Dari baris perintah Anda dapat menggunakan:
Dan jika Anda lupa menggunakan
-p
masih dapat Anda gunakanBtw, jangan lupa bahwa variabel
tabpagemax
(nilai default 10) membatasi berapa banyak tab yang dapat Anda buka dengan cara ini.sumber
Anda sebenarnya dapat membuka tab baru dan menyimpan tab saat ini tanpa menulis fungsi baru (lihat jawaban ini di Stack Overflow ):
Anda mungkin ingin membuka tab kosong baru (
:tabe
) sebelum melakukannya, karena file pertama akan terbuka di tab saat ini. Juga, tab ekstra kosong akan dibiarkan terbuka (lihat:help argdo
untuk memahami mengapa).sumber
:tabnew | args file1 file2 | argdo tabe | tabdo syntax on
Anda perlu menekan Enter untuk menghapus prompt dan ketik:close
untuk menghapus yang terakhir ( kosong) tab ... ini banyak sekali pengetikan, dan hanya layak jika Anda membuka banyak tab (untuk 2 atau 3 file, hanya menggunakan:tabe
dua kali akan lebih cepat).