2012-07-06 59 views
6

Vim是一款非常高效的编辑器,我喜欢每天都使用它,但是我发现在选项卡之间移动需要比预期更多的时间。如何列举vim中的标签?

当我想切换到另一个标签时,我经常多次重复gtgT。 Vim提供了一个更好的方式来达到所需的选项卡 - n + gt,其中n是制表符号。但要使用它,你应该首先计算标签号。如果您打开一打标签,它很快就会变得无聊。

我认为这将是很好的枚举选项卡。在文件名,东西前每个标签像这样在一个号码:

1 Readme | 2 main.c | 3 main.h | 4 process.h 

我希望这是可以配置的vim编辑配置或使用一些插件来做到这一点。

有没有办法实现它?

+1

你可以在ViM中打开标签?每天你都会从V​​iM学到新东西 – Shahbaz 2012-07-06 16:50:27

回答

5

您可以使用tabline选项来设置vim控制台模式下选项卡的标签。 请参阅:h setting-tabline的帮助,该帮助还显示了一个非常基本的简单示例,您可以根据需要对其进行调整。对于你想要的,我会用这样的东西:

fu! MyTabLabel(n) 
let buflist = tabpagebuflist(a:n) 
let winnr = tabpagewinnr(a:n) 
let string = fnamemodify(bufname(buflist[winnr - 1]), ':t') 
return empty(string) ? '[unnamed]' : string 
endfu 

fu! MyTabLine() 
let s = '' 
for i in range(tabpagenr('$')) 
" select the highlighting 
    if i + 1 == tabpagenr() 
    let s .= '%#TabLineSel#' 
    else 
    let s .= '%#TabLine#' 
    endif 

    " set the tab page number (for mouse clicks) 
    "let s .= '%' . (i + 1) . 'T' 
    " display tabnumber (for use with <count>gt, etc) 
    let s .= ' '. (i+1) . ' ' 

    " the label is made by MyTabLabel() 
    let s .= ' %{MyTabLabel(' . (i + 1) . ')} ' 

    if i+1 < tabpagenr('$') 
     let s .= ' |' 
    endif 
endfor 
return s 
endfu 
set tabline=%!MyTabLine() 
+0

谢谢,这正是我一直在寻找的!但是'set tabline =%!MyTabLine()'应该添加到示例的最底部,否则整个事情将不起作用。 – lambdas 2012-07-07 03:02:18

+0

噢,是的,应该添加。我会把它放到答案中 – 2012-07-07 08:13:19

2

如果您正在使用gvim

set guitablabel=(%N)\ %t\ %M 

类型:help tabline:help guitablabel阅读更多。

文档中有一个function MyTabLine()

+0

谢谢,但是我正在使用vim和终端仿真器。 – lambdas 2012-07-06 17:02:18

+0

尝试'设置tabline' – kev 2012-07-06 17:02:56