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

#1 楼

否(不是不删除缓冲区)。

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

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



:argdel *(删除现有参数列表)

:bufdo argadd %(对于每个缓冲区,将缓冲区的路径添加到列表)

:1,1000bd(将缓冲区1删除为1000;也许有更好的方法可以这样做)

:argdo e(对于每个参数,请编辑该参数)

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

评论


您的回答是“否”,但看来效果很好!

–aharris88
2015年2月5日21:00

(我的意思是“不”,这意味着您必须重新打开文件才能做到)。它实际上是否从1重新编号?我以为它是在我初次尝试时做的,但是现在我看到它没有为我重新编号?

–user72
2015年2月5日在21:01



是的,它为我重新编号。

–aharris88
2015年2月5日在21:03

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

–user72
2015年2月5日在21:04

:%bd将删除所有缓冲区。

–您
19年1月4日在8:00

#2 楼

“缓冲区数字变得疯狂”,告诉我!到一天结束时,我可以轻松使用超过100个缓冲区。但是幸运的是,正如您在此动画中看到的那样,您可以使用制表符完成缓冲区名称。



因此,即使您无法重新编号缓冲区,也可以仍然很容易跳来跳去。

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

关键是您可以养成只键入:b <minimum amount of unambiguous characters>选项卡即可跳转到所需文档的习惯。我认为这比记起“我的缓冲区是1:foo 2:bar 3:bar”等效果要好,这是我刚接触新手时的做法。

#3 楼

您可以使用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


我的标签行:


评论


惊人!我喜欢它 :)

–布拉斯科
19-10-2在10:28

不是问题的答案,而是用疯狂的缓冲区号来修补问题。仅显示buffer_numbers的建议:switch_buffers_and_tabs = 1和buffer_idx_mode = 0

–卡利加里
19-10-24在11:28

反正有修改航空公司的缓冲指数吗?

–fx-kirin
20-11-27在10:39

#4 楼

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

    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。

#5 楼

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



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