重编号缓冲区列表


29

在一段时间从事项目工作之后,我开始发现连续的缓冲区号之间存在很大的差距。这是因为出于各种原因擦除了它们之间的缓冲区。不幸的是,这会使键入后跳到特定缓冲区或选择一系列缓冲区变得很尴尬:ls。有什么方法可以从一个开始重新编号所有打开的缓冲区,而不必再次打开所有文件?

Answers:


21

否(并非没有删除缓冲区)。

打开缓冲区后,Vim不支持手动分配缓冲区编号或对缓冲区重新排序。它的原理是,每个缓冲区都获得一个在该缓冲区的生命周期内固定的标识符(在帮助中:ls,它指出“每个缓冲区都有一个唯一的编号。该编号不会更改...”)。

不过,您可以使用参数列表。将所有打开的缓冲区放入参数列表,删除所有未完成的缓冲区,然后打开参数列表中的所有内容。以下命令将完成此操作:

  • :argdel * (删除现有的参数列表)
  • :bufdo argadd % (对于每个缓冲区,将缓冲区的路径添加到列表中)
  • :1,1000bd (删除缓冲区1到1000;可能有更好的方法来执行此操作)
  • :argdo e (对于每个参数,请编辑该参数)

这将为您留出一个额外的空缓冲区,当您删除所有先前的缓冲区时,vim会打开该缓冲区,但这与您想要的功能相当接近。您可以只是:bd额外的缓冲区。


1
您的回答是不,但似乎效果很好!
aharris88

(在没有重新打开文件的情况下,我表示“否”)。它实际上是否从1重新编号?我以为它是在我第一次尝试时做的,但是现在我看到它没有为我重新编号?

是的,它为我重新编号。
aharris88

是的,我只是愚蠢,我发现了自己的错误。

实际上,“每个缓冲区获取的标识符在该缓冲区的生存期内都是固定的”!

14

“缓冲区数字变得疯狂”,告诉我!到一天结束时,我很容易超过100个缓冲区。但是幸运的是,正如您在该动画中看到的那样,您已经tab完成了缓冲区名称的设置。

点击:b se <Tab>

因此,即使您不能重新编号缓冲区,您仍然可以轻松跳来跳去。

我不知道动画是否清楚,但是“制表符完成”与命令行制表符完成不同。它更像是“歧义解决标签替换器”。这意味着我必须在命令行中键入,sctab然后setab在这里vim进行“ se”搜索并将其替换为第一个(也是唯一一个)匹配项。如果输入testtab,它将与'generate_test_data.py'匹配,然后tab又将与'scripts / setup_test_data.sh'匹配,然后tab又会循环回去,依此类推。

关键是您可以养成打字的习惯,而只是:b <minimum amount of unambiguous characters>tab跳到所需的文档。我认为这甚至比记住“我的缓冲区是1:foo 2:bar 3:etc”(这是我还是新手时的做法)要好得多。


7

您可以使用vim-airline。此插件的行为可能会解决您的问题:

参见airline.txt中的470-479行

这不会更改缓冲区编号,但是您可以在选项卡行中按行号从左到右选择一个缓冲区。这是我在以下航空公司的设置.vimrc

"set airline 
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#tab_nr_type = 1 " tab number
let g:airline#extensions#tabline#show_tab_nr = 1
let g:airline#extensions#tabline#formatter = 'default'
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#tabline#fnametruncate = 16
let g:airline#extensions#tabline#fnamecollapse = 2

let mapleader=","

let g:airline#extensions#tabline#buffer_idx_mode = 1

nmap <leader>1 <Plug>AirlineSelectTab1
nmap <leader>2 <Plug>AirlineSelectTab2
nmap <leader>3 <Plug>AirlineSelectTab3
nmap <leader>4 <Plug>AirlineSelectTab4
nmap <leader>5 <Plug>AirlineSelectTab5
nmap <leader>6 <Plug>AirlineSelectTab6
nmap <leader>7 <Plug>AirlineSelectTab7
nmap <leader>8 <Plug>AirlineSelectTab8
nmap <leader>9 <Plug>AirlineSelectTab9

我的标签行: 我的标签行


惊人!我喜欢它:)
Blasco

不是问题的答案,而是用疯狂的缓冲区号来修补问题。:只是一个建议,只显示buffer_numbers switch_buffers_and_tabs=1buffer_idx_mode=0
卡利加里

6

根据文档,缓冲区编号永远不会改变

    Each buffer has a unique number.  That number will not change,
    so you can always go to a specific buffer with ":buffer N" or
    "N CTRL-^", where N is the buffer number.

我认为重新编号缓冲区的唯一方法是重新启动vim。


0

旧问题,但是由于它在Google搜索中排在首位,因此我将其留在此处以供将来搜索。正如Bruno所建议的那样,支持缓冲区列表的模糊查找器是可行的方法。我个人使用并推荐fzf-vim。它提供了命令:FZFBuffers,看起来像这样:

在此处输入图片说明

如果需要,缓冲区号会显示在左侧,但是使用模糊查找器,您可能再也不需要使用它们了。只要记住文件名的一部分,通常就需要2-5次击键。就个人而言,我已将此命令映射到按键,并且对我而言,在缓冲区之间切换几乎是瞬间的!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.