Vim: ubah label untuk tab tertentu

19

Katakanlah saya memiliki banyak tab yang terbuka di Vim, dengan sebuah tabline terlihat seperti ini:

1 v/file1.py 2 t/file.py 1 t/file.py 1 o/otherfile.py

Lihat bagaimana dua tab sama-sama mengatakan "t / file.py"? Itu adalah file yang berbeda, mereka hanya bisa diubah menjadi label tab yang sama.

Dalam alur kerja saya, judul tab sering ambigu (yay untuk Chef menamai semuanya "default.rb") atau tidak membantu ("Saya tahu salah satu dari 8 tab ini dengan 4 buffer yang masing-masing memiliki file yang saya cari ...").

Saya ingin mengganti nama tab untuk menunjukkan apa yang secara logis mereka wakili:

1 homepage_view 2 tests 1 homepage_template 1 o/otherfile.py

Saya baik-baik saja dengan tab default ke label berbasis nama file, selama saya bebas untuk mengubahnya setelah tab dibuat.

Bagaimana saya bisa melakukan ini di Vim?

spiffytech
sumber
1
Saya tidak punya waktu untuk bereksperimen sekarang, tetapi lihat :help setting-tabline(untuk vim di terminal) atau :help setting-guitablabel(untuk gvim). Anda bisa menulis fungsi yang memeriksa variabel tab-local dan mengembalikannya atau default. Kemudian, setelah membuka tab :let t:mytablabel = 'homepage_template',.
benjifisher

Jawaban:

14

Ada plugin kecil yang bagus yang disebut Tabu yang membuatnya mudah. Instal saja dan kemudian Anda dapat mengubah judul tab dengan:

:TabooRename My Tab Title

Anda dapat melihat kode sumber untuk plugin itu jika Anda tertarik untuk menulis solusi Anda sendiri.

Jonathan Potter
sumber
8

Untuk gvim, lihat

:help 'guitablabel'
:help setting-guitablabel

Setel opsi ke ekspresi yang dievaluasi menjadi t:mytablabel(variabel tab-lokal) jika ada, atau yang lain menjadi string kosong (artinya menggunakan default):

:set guitablabel=%{exists('t:mytablabel')?t:mytablabel\ :''}

Mungkin itu sudah terlalu rumit, atau mungkin Anda ingin menjadi pelamun. Dalam hal ini, tentukan fungsi:

function! GuiTabLabel()
  return exists('t:mytablabel') ? t:mytablabel : ''
endfunction
:set guitablabel=%{GuiTabLabel()}
:set go+=e

Kemudian, di tab mana pun yang ingin Anda timpa default, lakukan sesuatu seperti

:let t:mytablabel = 'homepage_template'

Jika Anda menggunakan vim di terminal, bukan gvim, maka Anda harus mengatur 'tabline'opsi 'guitablable'. Ini sedikit lebih rumit, karena Anda memerlukan satu ekspresi yang menyertakan label untuk semua tab yang terbuka. Ada contoh lengkap di bawah

:help setting-tabline
benjifisher
sumber