有没有办法在 emacs 实现 vscode 那样的 tab 分组方式?

VScode 里面,打开一个项目之后,如果查看使用的一些 library 的时候,会打开新的 tab,这些 tab 也是在这个项目 group 里面。

在 emacs 里面我用 centaur-tab ,默认就可以通过 projectile 实现一个 project 的 tab 组成一个 group,但是对于查看引用的 library 打开的新的 tab 不会加入到现在这个 group 了,而是新起一个 group。不知道有没有办法实现 vscode 那样的方式。

没用过 tab group,但是你可以找找它是怎么判断的函数。

如果你的 library 是在当前工程之外的话,想必是很难的。一种或许可行的思路是给你查引用的工具加个 advice,使得跳转到的 buffer 被设置为属于跳转前那个 buffer 的工程。不过我不用 projectile,所以没法给具体的建议。

centaur-tab 都没人维护了,还是用回 awesome-tab 吧。

Emacs中使用tab本身就是个伪命题,切换buffer要方便很多的

1 个赞

不是这样的,用习惯还是tab直观好用

咱写过一篇博客介绍 tab 的优点:Jump Between Buffers in a Slick Way - Kinono's blog

2 个赞

用过大概半年的 awsome-tab ,感觉在buffer 少的时候是很方便的(全屏使用的话,能放更多tab),buffer 多了还是通过切换buffer 方便。另外,awesome-tab 和 awsome-tray 是好搭档。

或许这就是「人类无法相互理解」吧 :rofl: 我是想不通,直接切换 buffer 又要多按键又费脑,为啥好多人天天用得挺欢乐的 :rofl:

其实没事就kill掉不用的buffer,再结合awesome-tab就很好用。

打开一大堆buffer平常不用,各种牛逼插件去搜索不就是浪费时间吗?

我的理解,人一天聚焦的就是几个buffer,用完关闭就可以了。

1 个赞

我也觉得在一堆buffer里搜索不可思议,虽然我有自己的snails,我发现最多的是用它来搜索浏览器历史 :joy:

2 个赞

确实,我就经常要清空buffer,只保留历史记录,这样搜索的时候仍然搜索的到。
现在 Emacs 能习惯切换buffer 的方式,主要是为了使用习惯的一致性,都是以搜索关键字快速定位。 除了切换 buffer ,还有 M-x 找命令,org-roam-node-find 找笔记等。

采用perspective 配合buffer 切换,高效快捷。常用的buffer会放前面,C-x b 加上C-n/p 自动就能对应上;不是常用的简单输入几个字母模糊查找即可。tab 方式看起来很直观,使用中并不能带来多大的便捷性,除非使用鼠标。其次,tab太多的话这种便捷性也失去了意义,就像chrome一样,标签一多密密麻麻,连个title都看不清,还得借助鼠标或者其他插件来解决。另外,tab占用内存是个大问题,在很多情况下占用太多资源。本质上是因为tab并不是原生支持的,是headerline或者其他模拟出来的。

个人观点。跟你说的一样,「人类无法相互理解」吧,但可以交流。

1 个赞

这是有前提的,打开buffer不多的情况下才成立

centaur-tabs 我看github的作者还是有更新的啊

我觉得不是理解的问题,可能是:

  1. 傲慢。

  2. 偏见。

就像有人不用evil一样。

这个就有点武断了,还有一种,习惯。

emacs里面的tab实现是借助tab-line和headline实现的,多的只是一些列表和hash-tab,不会有那么多内存占用。

我的个人观点是,不管项目多大,任一段时间聚焦的编程问题就在几个buffer之间,不会出现写代码要在几十个buffer之间切换的问题。

几十buffer切换有几个场景:

  1. 找工程外文件,helm,ivy,snails来处理
  2. 搜索文件,helm,ivy,snails来处理
  3. 重构代码,deadgrep,color-rg来处理
  4. 切换工程目录
  5. 搜索历史,比如浏览器历史

我平常的配合策略:

  1. 在上面举例场景,目标明确但是文件或记录太多时搜索最高效,这些场景是关键字驱动的
  2. 在日常局部编程时,几个文件的范围用tab更简单,因为屏幕所在区域就可以快速切换,心智负担最小,那针对标签多的情况怎么办?我的做法是在解决局部问题时,所有没用buffer都kill掉,剩下标签都是有用的,一眼就可以看到的

我是awesome-tab配合snails一起用的,我经常kill不用的buffer,在这种情况下,awesome-tab是补强,而不是没用。

每种局部问题应该用特殊插件去解决,而不是都用搜索去解决,就像minibuffer输入命令,我觉得smex体验比helm,ivy,snails都要好,因为它在历史功能上做的足够好,又不像补全插件那样弹出很大框干扰用户。

1 个赞

我说说我的实际场景。我用 doom emacs vim 绑定,给切换左右 tab 设定是 C-hC-l,关闭 buffer 设置的是 M-w 。这几个按键实际上和在 chrome 里面的设置一样。

我会很频繁的关闭 buffer。保持打开的 buffer 数量在10 个以内。这样在编辑一个文件的时候,通常这个文件相关的 buffer 都在他的左右,扫一眼然后就可以通过 C-h/l 切换过去。我感觉比使用例如 Spc-Spc 这样的方式查找方便。

另外,我在 chrome 里面也不会打开密密麻麻的标签。。我会定期关闭那些没用的。。

大家有什么比这更方便的方式么?C-x b 这样的,我感觉还是没用这个方便。当然对于不在当前那个 buffer 附近的还是需要 C-x b 的。这个主要是对于切换到最近使用的一些 buffer 非常方便。

1 个赞

persp-mode能做到buffer分组的同时自定义新buffer自动加入某个分组,默认支持project.el和projectile.el, 同时也能记忆每个分组的window布局, 但是没有tab,不过有persp-switch-to-buffer让swith-buffer只显示当前组内的buffer。 感觉awesome-tab和persp-mode如果能结合一下的话应该就能满足楼主要求?

1 个赞