Bagaimana cara membuat membuka tab baru sebagai default?

10

Ketika saya membuka vimdengan banyak file ( vim f1 f2 ...), bagaimana saya bisa membukanya di tab secara langsung, tanpa menggunakan -p?

Saya ingin memisahkan perilaku shell dari perilaku vim, menghapus vimalias -based, dll. Itulah sebabnya saya lebih suka untuk tidak menggunakan alias, dll. (Karenanya, tidak ada -p).

Saya cukup yakin ini telah diminta di beberapa situs SE (seperti pada SO ). Namun, saya tidak dalam posisi untuk menilai apa yang akan menjadi cara terbaik untuk melakukan ini, jadi saya juga berharap untuk catatan tentang mengapa metode yang disarankan itu baik.

Untuk pos SO tertentu yang ditautkan:

  • jawaban yang diterima benar tabpagemax=9999. Sebut saja itu bias pribadi, tetapi saya melihat batas yang ditetapkan untuk sejumlah besar dan saya pikir ada sesuatu yang salah (seperti yang saya rasakan jika saya melihatnya chmod 777).

    :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&vim
    
  • jawaban lainnya mengarah ke tab ekstra kosong yang dibuka, sementara jauh lebih ringkas.

    :autocmd VimEnter * argdo tabedit
    

Saya berharap jawaban yang tidak memiliki tab ekstra dibuka dan tidak menetapkan batas untuk nilai besar (atau menjelaskan mengapa itu bukan hal yang buruk).

muru
sumber
@OrangeTux Saya memposting dalam semangat jawaban Gilles. Tetapi dengan downvote saya bertanya-tanya apa yang akan dikatakan Gilles pada sebuah posting yang menghubungkan ke posting yang ada?
muru
@Carpetsmoker Saya tidak melihat pembaruan komentar Anda. Sebuah tabpage kosong bukan masalah besar ketika sesi Anda cenderung diakhiri dengan :qakebiasaan. Jika itu satu-satunya keuntungan saya akan pergi dengan yang lain, karena memang terlihat lebih sederhana.
muru
3
@muru WWGS? Apakah Anda punya alasan untuk menganggap jawaban Stack Overflow tidak memuaskan? Jika demikian, jelaskan itu dalam pertanyaan Anda. Bagaimanapun, rangkum jawaban SO dalam pertanyaan Anda. Jika itu mengarah ke pertanyaan yang berisi jawabannya sendiri, jangan posting.
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles Diperbarui. Saya tidak memposting perintah yang sebenarnya, menurut Anda harus?
muru

Jawaban:

4

Setelah beberapa percobaan, saya menemukan ini sebagai cara terbaik; itu harus berperilaku sama dengan vim -p:

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

Pertama, tab allbuka semua entri dalam daftar argumen ( :args) di sebuah tab. Daftar argumen adalah daftar file yang Anda berikan ke Vim saat startup. Dan tabfirstpastikan tab pertama difokuskan daripada yang terakhir (ini opsional).

Kami tidak melakukan semua ini jika &diffdiatur; jika ya, kami menggunakan vimdiffatau vim -d, di mana kami ingin memiliki 2 jendela, dan bukan 2 tab.

Dalam jawaban ini saya juga menulis sedikit tentang daftar argumen dan tab allyang mungkin menarik.


Beberapa catatan tentang solusi lain:

  • tab ballmembuka tab untuk setiap entri dalam daftar buffer , bukan daftar argumen. "Masalahnya" adalah bahwa daftar buffer dapat disimpan dalam file viminfo pada saat berhenti, dan dikembalikan pada saat startup (jika %ada 'viminfo', tidak diaktifkan secara default). Jadi jika Anda cukup mengetiknya vimakan membuka file-file itu. Saya menganggap ini tidak diinginkan, meskipun saya bisa membayangkan beberapa orang menganggapnya berguna; jadi gunakan apa yang Anda inginkan.

  • set tabpagemax=9999tidak diperlukan; default-nya 10, dan ini harus baik-baik saja. Anda dapat meningkatkan ini di vimrc Anda jika Anda menginginkan lebih, tetapi 9999ini adalah angka yang konyol. Jika Anda menggunakan -p, Anda juga mendapatkan tabpagemaxtab. Jadi ini harus menghargai itu. Ingat bahwa ini akan membuka (membaca) buffer pada startup, jadi agak lambat.

  • autocmd VimEnter * argdo tabeditadalah cara yang sama untuk mengatakan tab all. Namun, buffer awal tidak dihapus, jadi Anda pergi dengan tab tambahan itu ( tab allmenggantikan semua tab). Untuk mengatasinya, Anda perlu solusinya dalam jawaban Josh Petrie.

Martin Tournoij
sumber
2

Saya pikir menambahkan sesuatu seperti ini ke Anda .vimrcdapat menyelesaikan masalah Anda (perhatikan, bahwa saya tidak benar-benar menggunakan ini dan hanya melakukan pengujian minimal, mungkin melakukan hal-hal aneh dalam beberapa kasus):

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

autocmd VimEnter * call OpenArgumentsInTabs()

Seperti yang Anda catat, argdo tabeditakan meninggalkan Anda tab ekstra kosong. Jadi Anda bisa menutup tab itu secara otomatis. Namun, Anda tidak bisa hanya memohon tabclosetidak dicentang, atau vim akan memberi Anda kesalahan ketika Anda meluncurkannya tanpa argumen atau satu file (Anda "tidak dapat menutup tab terakhir"). Alih-alih, periksa untuk melihat apakah jumlah total tab lebih besar dari satu (itulah yang $menyebabkan tabpagenrpengembalian) dan baru Anda perlu menutup tab terakhir.


Yang mengatakan, saya merasa perlu menunjukkan bahwa tab vim tidak seperti tab editor lain , dan itu sesuatu yang perlu diingat ketika mempertimbangkan bagaimana menggunakan tab dalam alur kerja Anda (Anda tampaknya menyadari hal ini, tetapi saya ingin membuat poin untuk kepentingan pembaca masa depan yang mungkin tidak jadi mereka dapat membuat keputusan sendiri).

Komunitas
sumber