Vim: Hiển thị chỉ mục của các tab trong tabline


8

Nói cho phép tôi mở file1.txt, file2.txt, file3a.txtfile3b.txtnhư vậy mà tabline (điều trên đầu) trông như sau:

file1.txt  file2.txt  2 file3a.txt

(Lưu ý cách file3b.txt.thiếu vì nó được hiển thị trong phần tách, trong cùng một tab như file3a.txt)

Để di chuyển nhanh hơn giữa các tab (với <Number>gt), tôi muốn mỗi tab hiển thị chỉ mục của nó, dọc theo tên tệp. Thích như vậy:

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

Định dạng (cụ thể là các dấu ngoặc nhọn) là tùy chọn; Tôi chỉ muốn chỉ số xuất hiện ở đó (các 1:, 2:và vân vân).

Không có manh mối trên :h tab-page-commandshoặc bất cứ điều gì google.


1
Cập nhật: Plugin này có thể hữu ích. Tôi nghĩ rằng nó đã được tạo ra nhiều sau khi câu hỏi này được trả lời vì vậy nó không xuất hiện trong bất kỳ câu trả lời nào.
crayzeewulf

Câu trả lời:


0

Bạn cần nhìn vào:

:help 'tabline'
:help setting-tabline

Và nếu bạn có "e" trong cài đặt 'guioptions' của mình:

:help 'guitablabel'

Điều đó đã đưa tôi đi đúng hướng. Cảm ơn rất nhiều!
bitmask

9
@bitmask có lẽ bạn có thể cung cấp giải pháp của bạn? Heptite, bạn có thể sửa đổi câu trả lời của bạn?
wmarbut

@wmarbut sử dụng plugin này , thật tuyệt vời.
ospider

Đã đồng ý. Vô cùng thất vọng khi giải pháp rõ ràng là "được tìm thấy" nhưng không được cung cấp và mọi người phải dành cùng một khoảng thời gian để tìm hiểu các tài liệu và viết các cấu hình giống nhau.
Alex H

12

đặt cái này vào vimrc của bạn

" 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
Bạn có biết những gì '%999XX'có nghĩa là ở đây?
Bạch

Vì cái này hoạt động cho cả terminal và gvim, tôi nghĩ nó là giải pháp tốt nhất. Hãy ủng hộ tôi, thưa ông.
imolit

5

Trên trang wikia, bạn có thể tìm thấy ít nhất hai (những cái tôi đã kiểm tra) cung cấp cho bạn các chỉ mục tab và một trong số chúng tạo ra số lượng cửa sổ bên trong mỗi bộ đệm có chỉnh sửa.

Đây là kết quả của những sửa đổi của tôi trên cái tạo ra số lượng bộ đệm đã chỉnh sửa, thay đổi tôi đã thực hiện là làm cho giá trị nổi bật của số đếm phù hợp với phần còn lại của tab:

nhập mô tả hình ảnh ở đây

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

Kịch bản của bạn tốt hơn tập lệnh khác vì nó giữ lại phần mà tab hiển thị nếu tệp đã được chỉnh sửa. Cảm ơn!
Plasty Grove

Vâng, tôi đã sử dụng tabline từ airlineplugin, nhưng thành thật mà nói, tabline cũ mà tôi nghĩ ra này có nhiều chức năng hơn ...
Steven Lu

3

Các tabline Plugin là một vim plugin mà cụ yêu cầu chức năng và sẽ không thổi ra vimrc của bạn. Đơn giản chỉ cần cài đặt, và khởi động lại vim.

Để cài đặt:

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

hoặc sử dụng trình quản lý plugin.


1
Chào mừng bạn đến với Siêu người dùng! Vui lòng đọc Cách giới thiệu phần mềm để biết thông tin tối thiểu và đề xuất về cách đề xuất phần mềm trên Super User. Để giữ cho câu trả lời của bạn hữu ích ngay cả khi (các) liên kết được cung cấp phá vỡ các chi tiết này nên được chỉnh sửa thành câu trả lời của bạn.
Tôi nói phục hồi Monica

0

Đối với Vim dựa trên GUI (Gvim trên Linux, MacVim trên Mac, v.v.), hãy đặt cái này vào .gvimrc:

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

Một số mẹo về việc thực sự sử dụng các số được hiển thị:

  • Ngtsẽ chuyển sang tab N. Ví dụ: 3gtchuyển đến tab 3.
  • :tabm2di chuyển tab hiện tại để xuất hiện sau tab 2.
    • Để di chuyển tab này đến vị trí đầu tiên, hãy sử dụng :tabm0
    • Để di chuyển tab này đến vị trí cuối cùng, chỉ cần sử dụng :tabm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.