烦人的vim标签线标签

时间:2012-03-24 15:22:50

标签: vim tabs window

这不是缩进问题。

Vim的窗口导航行为真让我烦恼。假设此窗口当前配置已打开,文件wp-config-sample.php是当前文件:

enter image description here

由于所有其他文件都位于不同的目录中,如果我将其中任何一个文件集中在<ESC>gt上,所有这些文件都会更改其内容,并且标签也会调整大小:

enter image description here

这是一个简单的例子,但问题确实出现在有很多标签打开但我无法弄清楚我在哪里,因为焦点标签显着改变了它的位置原来的。

我认为好的行为是Firefox上的同一个系统,其中聚焦和未聚焦的选项卡永远不会改变它们的位置,而只关注一个只会略微强调。

有没有办法让它停止?

4 个答案:

答案 0 :(得分:3)

在Freenode的#vim上,tappi澄清说我已autochdir打开了。要快速解决这个问题:

:set noautochdir

Coot向我指出了一个不错的vim's wiki link,其中有一个很好的代码段,可以在.vimrc中很好地保留autochdir行为,并在切换到窗口时保留常规标签标题

现在我的标签很漂亮了!

答案 1 :(得分:1)

是的,您只能在Vim中显示文件名。请参阅:h tabline:h filename-modifiers

答案 2 :(得分:1)

是的,当你打开autochdir时,默认的标签标签会让标签真的很烦人。基本上,如果您的:pwd不是文件的位置,它们会向您显示完整路径(缩写),如果您的:pwd与文件相同,则只显示文件名。当您启用autochdir时,:pwd会在您加载缓冲区时发生更改,包括切换标签页时。我碰巧喜欢autochdir,因为:ls和任何文件操作都是自动相对于活动缓冲区的cwd。我总是知道这个位置,因为我的状态行中有完整的路径。

我有gui标签设置为我显示一些不同的东西...标签编号,修改过的指标,如果标签中有多个窗口(显示计数),并且始终只显示缓冲区的文件名(如果有多个窗口,则使用活动窗口中的那个。)

" GUI Tab label full path
function! GuiTabLabeler()
  let tabno = tabpagenr()
  let label = ''
  let bufnrlist = tabpagebuflist(v:lnum)

  " Add '+' if one of the buffers in the tab page is modified
  for bufnr in bufnrlist
    if getbufvar(bufnr, "&modified")
      let label = '[+]'
      break
    endif
  endfor

  " Append the number of windows in the tab page if more than one
  let wincount = tabpagewinnr(v:lnum, '$')
  if wincount > 1
    let label .= ' [' . wincount . ']'
  endif

  " Append the buffer name
  return tabno . " " . 
         \ fnamemodify(bufname(bufnrlist[tabpagewinnr(v:lnum) - 1]), ":t")
         \ . label
endfunction

set guitablabel=%!GuiTabLabeler()

选项卡中的选项卡编号很不错,特别是如果您执行将alt-number键映射到它们的操作:

" Tab navigation in with alt-#
noremap <A-1> :tabnext 1<CR>
noremap <A-2> :tabnext 2<CR>
noremap <A-3> :tabnext 3<CR>
noremap <A-4> :tabnext 4<CR>
noremap <A-5> :tabnext 5<CR>
noremap <A-6> :tabnext 6<CR>
noremap <A-7> :tabnext 7<CR>
noremap <A-8> :tabnext 8<CR>
noremap <A-9> :tabnext 9<CR>
noremap <A-0> :tabnext 0<CR>

这样,我的gui标签保持非常狭窄和干净。我更喜欢在状态行(以及其他内容)中使用完整路径的文件名:

" Statusline 
set laststatus=2
let &statusline='%F  %r%m  [%{&fileformat}]%y[%{strlen(&fenc)?&fenc:&enc}]'
           \ . '%= --%3p%% --   l:%3l, c:%3c (%03b 0x%02B)'

答案 3 :(得分:0)

对于gVim,我使用

R:"Enter slope, intercept"
User:*input*
R:"Enter slope, intercept"
User:*input*
R:"Enter slope, intercept"
User:"no"
R:"Thank you for inputs"

,因此具有一个标签标签,显示:

  • 标签号
  • 文件名
  • 如果在名称旁边修改了'+'