เป็นกลุ่ม: แสดงดัชนีของแท็บในแท็บไลน์


8

ช่วยบอกผมเปิดfile1.txt, file2.txt, file3a.txtและfile3b.txtเช่นที่ tabline (สิ่งที่ด้านบน) ลักษณะเช่นนี้

file1.txt  file2.txt  2 file3a.txt

(โปรดสังเกตว่าfile3b.txt.จะหายไปอย่างไรเพราะมันจะแสดงในการแยกในแท็บเดียวกันเป็นfile3a.txt)

หากต้องการย้ายอย่างรวดเร็วยิ่งขึ้นระหว่างแท็บ (ด้วย<Number>gt) ฉันต้องการให้แต่ละแท็บแสดงดัชนีตามชื่อไฟล์ ชอบมาก

1:<file1.txt>  2:<file2.txt>  3:<2 file3a.txt>

การจัดรูปแบบ (โดยเฉพาะวงเล็บปีกกามุม) เป็นตัวเลือก; ผมแค่อยากดัชนีจะปรากฏมี (คน1:, 2:และอื่น ๆ )

ไม่มีเงื่อนงำ:h tab-page-commandsหรือ google ใด ๆ


1
อัปเดต: ปลั๊กอินนี้อาจมีประโยชน์ ฉันคิดว่ามันถูกสร้างขึ้นมากหลังจากตอบคำถามนี้แล้วดังนั้นจึงไม่ปรากฏในคำตอบใด ๆ
crayzeewulf

คำตอบ:


0

คุณต้องดู:

:help 'tabline'
:help setting-tabline

และหากคุณมี "e" ในการตั้งค่า 'guioptions' ของคุณ:

:help 'guitablabel'

นั่นทำให้ฉันไปถูกทาง ขอบคุณมาก!
bitmask

9
@ bitmask คุณอาจให้โซลูชันของคุณได้หรือไม่ Heptite คุณช่วยแก้ไขคำตอบของคุณได้ไหม?
wmarbut

@wmarbut ใช้ปลั๊กอินนี้มันวิเศษมาก
ospider

ตกลง น่าผิดหวังอย่างยิ่งเมื่อเห็นได้ชัดว่า "พบ" แต่ไม่มีวิธีแก้ปัญหาและทุกคนต้องใช้เวลาขุดเอกสารและเขียน config เดียวกัน
Alex H

12

ใส่สิ่งนี้ไว้ใน vimrc ของคุณ

" Rename tabs to show tab number.
" (Based on http://stackoverflow.com/questions/5927952/whats-implementation-of-vims-default-tabline-function)
if exists("+showtabline")
    function! MyTabLine()
        let s = ''
        let wn = ''
        let t = tabpagenr()
        let i = 1
        while i <= tabpagenr('$')
            let buflist = tabpagebuflist(i)
            let winnr = tabpagewinnr(i)
            let s .= '%' . i . 'T'
            let s .= (i == t ? '%1*' : '%2*')
            let s .= ' '
            let wn = tabpagewinnr(i,'$')

            let s .= '%#TabNum#'
            let s .= i
            " let s .= '%*'
            let s .= (i == t ? '%#TabLineSel#' : '%#TabLine#')
            let bufnr = buflist[winnr - 1]
            let file = bufname(bufnr)
            let buftype = getbufvar(bufnr, 'buftype')
            if buftype == 'nofile'
                if file =~ '\/.'
                    let file = substitute(file, '.*\/\ze.', '', '')
                endif
            else
                let file = fnamemodify(file, ':p:t')
            endif
            if file == ''
                let file = '[No Name]'
            endif
            let s .= ' ' . file . ' '
            let i = i + 1
        endwhile
        let s .= '%T%#TabLineFill#%='
        let s .= (tabpagenr('$') > 1 ? '%999XX' : 'X')
        return s
    endfunction
    set stal=2
    set tabline=%!MyTabLine()
    set showtabline=1
    highlight link TabNum Special
endif

2
คุณรู้'%999XX'หรือไม่ว่าที่นี่มีความหมายอะไร?
Bach

ตั้งแต่อันนี้ใช้งานได้ทั้งเทอร์มินัลและ gvim ฉันคิดว่ามันเป็นทางออกที่ดีที่สุด เอา upvote ของฉันครับ
imolit

5

ในหน้า wikiaคุณอาจพบอย่างน้อยสอง (อันที่ฉันทดสอบ) ซึ่งให้ดัชนีแท็บแก่คุณและหนึ่งในนั้นสร้างจำนวน windows ภายในแต่ละบัฟเฟอร์ที่มีการแก้ไข

นี่คือผลลัพธ์ของการแก้ไขของฉันที่สร้างการนับจำนวนบัฟเฟอร์ที่แก้ไขการเปลี่ยนแปลงที่ฉันทำคือการทำให้ค่าไฮไลต์ของการนับสอดคล้องกับส่วนที่เหลือของแท็บ:

ป้อนคำอธิบายรูปภาพที่นี่

set tabline=%!MyTabLine()  " custom tab pages line
function MyTabLine()
        let s = '' " complete tabline goes here
        " loop through each tab page
        for t in range(tabpagenr('$'))
                " set highlight
                if t + 1 == tabpagenr()
                        let s .= '%#TabLineSel#'
                else
                        let s .= '%#TabLine#'
                endif
                " set the tab page number (for mouse clicks)
                let s .= '%' . (t + 1) . 'T'
                let s .= ' '
                " set page number string
                let s .= t + 1 . ' '
                " get buffer names and statuses
                let n = ''      "temp string for buffer names while we loop and check buftype
                let m = 0       " &modified counter
                let bc = len(tabpagebuflist(t + 1))     "counter to avoid last ' '
                " loop through each buffer in a tab
                for b in tabpagebuflist(t + 1)
                        " buffer types: quickfix gets a [Q], help gets [H]{base fname}
                        " others get 1dir/2dir/3dir/fname shortened to 1/2/3/fname
                        if getbufvar( b, "&buftype" ) == 'help'
                                let n .= '[H]' . fnamemodify( bufname(b), ':t:s/.txt$//' )
                        elseif getbufvar( b, "&buftype" ) == 'quickfix'
                                let n .= '[Q]'
                        else
                                let n .= pathshorten(bufname(b))
                        endif
                        " check and ++ tab's &modified count
                        if getbufvar( b, "&modified" )
                                let m += 1
                        endif
                        " no final ' ' added...formatting looks better done later
                        if bc > 1
                                let n .= ' '
                        endif
                        let bc -= 1
                endfor
                " add modified label [n+] where n pages in tab are modified
                if m > 0
                        let s .= '[' . m . '+]'
                endif
                " select the highlighting for the buffer names
                " my default highlighting only underlines the active tab
                " buffer names.
                if t + 1 == tabpagenr()
                        let s .= '%#TabLineSel#'
                else
                        let s .= '%#TabLine#'
                endif
                " add buffer names
                if n == ''
                        let s.= '[New]'
                else
                        let s .= n
                endif
                " switch to no underlining and add final space to buffer list
                let s .= ' '
        endfor
        " after the last tab fill with TabLineFill and reset tab page nr
        let s .= '%#TabLineFill#%T'
        " right-align the label to close the current tab page
        if tabpagenr('$') > 1
                let s .= '%=%#TabLineFill#%999Xclose'
        endif
        return s
endfunction

สคริปต์ของคุณดีกว่าอีกอันหนึ่งเนื่องจากจะยังคงส่วนที่แท็บแสดงหากไฟล์ถูกแก้ไข ขอบคุณ!
Plasty Grove

ใช่ฉันได้รับการใช้ tabline จากที่airlineปลั๊กอิน แต่จะซื่อสัตย์นี้ tabline เก่าที่ฉันมาด้วยเป็นจำนวนมากทำงานได้มากขึ้น ...
สตีเว่น Lu

3

tabline ปลั๊กอินเป็นกลุ่มปลั๊กอินที่ดำเนินการร้องขอการทำงานและจะไม่ระเบิดออก vimrc ของคุณ เพียงติดตั้งและเริ่มต้นเป็นกลุ่ม

ติดตั้ง:

cd /usr/share/vim/vimfiles/plugin/
wget https://raw.githubusercontent.com/mkitt/tabline.vim/master/plugin/tabline.vim

หรือใช้โปรแกรมจัดการปลั๊กอิน


1
ยินดีต้อนรับสู่ Super User! โปรดอ่านวิธีการแนะนำซอฟต์แวร์สำหรับข้อมูลขั้นต่ำที่จำเป็นและคำแนะนำเกี่ยวกับวิธีการแนะนำซอฟต์แวร์ใน Super User เพื่อให้คำตอบของคุณมีประโยชน์แม้ว่าลิงก์ที่ให้ไว้จะแบ่งรายละเอียดเหล่านี้ควรได้รับการแก้ไขในคำตอบของคุณ
ฉันพูดว่า Reinstate Monica

0

สำหรับ Vim แบบอิง GUI (Gvim บน Linux, MacVim บน Mac ฯลฯ ) วางสิ่งนี้ลงใน.gvimrc:

set guitablabel=%N:%M%t " Show tab numbers

เคล็ดลับบางประการเกี่ยวกับการใช้ตัวเลขที่แสดงจริง:

  • NgtNจะเปลี่ยนไปยังแท็บ ตัวอย่างเช่น3gtไปที่แท็บ 3
  • :tabm2ย้ายแท็บปัจจุบันไปปรากฏหลังจากแท็บ 2
    • หากต้องการย้ายแท็บนี้ไปยังตำแหน่งแรกให้ใช้ :tabm0
    • หากต้องการย้ายแท็บนี้ไปยังตำแหน่งสุดท้ายเพียงใช้ :tabm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.