烦人的vim标签行标签

5

这不是一个缩进问题。

Vim在窗口导航时的行为真的很让我烦恼。假设当前打开了这样一个窗口配置,文件wp-config-sample.php是当前文件:

enter image description here

由于所有其他文件都在不同的目录中,如果我用<ESC>gt聚焦其中任何一个,它们所有的内容都会改变,选项卡也会被调整大小:

enter image description here

这只是一个简单的例子,但当有许多选项卡打开时,问题确实出现了,我无法确定自己所在的位置,因为焦点选项卡从原来的位置显著变化。

我希望有一个像Firefox一样的好的行为系统,在那里,聚焦和未聚焦的标签永远不会改变它们的位置,而聚焦的标签只是稍微强调一下。

有没有办法停止这种行为?


修改标题以消除“这不是缩进问题”的歧义。 - sehe
4个回答

3

tappi,在 Freenode 的 #vim 频道上指出我启用了 autochdir。要快速解决此问题:

:set noautochdir

coot给我指了一个不错的vim维基链接,其中有一个很好的代码片段可以在.vimrc中使用,以保留autochdir行为并在切换窗口时保持常规标签标题。

现在我的标签页变得漂亮了!


1

是的,你可以在Vim中只显示文件名本身。请参见:h tabline:h filename-modifiers


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+数字键映射到它们上面时。
" 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)'

0

对于 gVim 我使用的是

:set guitablabel=%N/\ %t\ %M

因此,标签应显示:

  • 选项卡编号
  • 文件名
  • 如果修改过,则在名称旁边显示“+”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接