Emacs编程流
在Emacs中,不同的使用场景有不同的使用方法,有些场景需要直觉操作,有些场景需要效率优先。
日常Emacs使用场景简单总结主要有以下几类:
- 打开文件:通过find-file、dired或EAF文件管理器打开需要编辑的文件;
- 常用文件跳转:看一下顶部标签栏快速切换到另外一个常用文件;
- 文件模糊搜索:当打开文件过多时,通过标签栏找文件太费劲,更好的方式是通过搜索框架来模糊查找文件,比如Ivy、Helm和Snails;
- 文件对比:Emacs最好的设计,快速分屏,快速切换不同窗口中的文件
- 命令执行:通过M-x操作来执行一些复杂命令,这些命令平常不用,但是需要时往往想不起命令的名字,现在比较流行Smex
标签栏的优势
我们编程时,时间占用比最大的其实就是常用文件间的快速编辑和快速切换,社区常用的搜索框架都需要搜索一下关键字,特别是在专注思考编程问题时,频繁的关键字搜索对心智负担比较大,容易影响思考的流畅性。
当常用文件在10个以内时,标签栏的直觉化操作就非常方便,EmacsChina社区的一个道友还专门写了一篇文章Jump Between Buffers in a Slick Way来论述标签栏的优势。
更简洁的标签栏设计
今天花了几个小时写了一个新的标签栏插件Sort-Tab, 着重解决两个体验问题:
- 之前的Awesome-Tab虽然默认支持Project分组和自定义规则分组,但是这几年我使用的体验看,不管怎么分组都很麻烦,因为分组容易把两个经常编辑的文件分到两个不同的组(比如不如不同项目间借鉴代码、Web项目中不同编程语言的文件并列编辑等),导致我经常需要切换标签分组才能找到标签,很是麻烦;
- Emacser不喜欢标签栏的另外一个理由是分屏后标签栏占用太多的纵向空间,两个窗口之间有一条比较宽的分割线,看着不爽。
Sort-Tab相对于Awesome-Tab的优势主要有两个:标签分组策略和屏幕空间设计。
- 根据文件的使用频率来排序,这样使用的时间越长,相关的文件标签挨的越紧,基本上可以做到下意识的左右切换(借鉴了kinono的想法,很赞);
- 顶栏设计,抛弃了header-line和tab-line的设计, 所有窗口都共享一个标签栏,最大程度减少纵向空间的浪费,再配合Awesome-Tray,整体上可以实现非常简洁的视觉感官。
插件今天才写完,估计还有一些小问题,欢迎各位朋友试用反馈建议。
19 个赞
@manateelazycat 光标处所在的eldoc提示会有干扰。
先把 eldoc 给关闭了吧,我今天研究了 eldoc 的源码,这货会一直 rename current buffer, 我不知道作者为什么要这么做。
我最开始写了一个 advice 也没法避免 eldoc 的影响。
Weiss
8
简单试用了下,一个是前面那位说的 eldoc 的问题,另外还有就是如果执行 (other-window 1)
的话,会跳到 tab 里。
另外有没有可能支持不同 frame 拥有独立的 tab 组合呢?我之前是自己用 tab-line 简单糊了一个,就是手动创建 group 名,手动添加 buffer ,然后不同的 frame 和不同的 group 可以任意组合。问题就是①手动稍微有点麻烦②就像你说的,分组其实很难分准确。
1 个赞
(other-window 1) 不应该会进入tab window, 我已经防御了。
eldoc 的问题我今天看看,看看会不会解决。
现在应该默认就支持不同 frame 吧。
测试了一下,Emacs 27的buffer-list-update-hook感觉有bug, 经常产生很多不必要的 current-buffer.
Emacs 29.0.50 没问题
单独用一个window还作为标签栏我是没想到的,使用过程中发现例如 ace-window,winum-mode 这些对窗口进行操作的会把标签栏当作普通窗口对待,当然使用标签栏后可能也用不到这些插件了。
1 个赞
主要 minibuffer 没法彻底关闭,要不我就可以把 sort-tab 和 awesome-tray 合二为一了,目前的这种设计也很简洁。
在保留 tab 的功能的时候,避免每个窗口一个 tab-line 和 mode-line, 纵向空间利用率最大了。
zhscn
14
简单统计了一下我打开的文件一般在五十个左右。。好像不太适合我。
对这个比较大的项目我一般用persp-mode单独管理window和buffer,使用lsp/rg跳转来打开文件,分成五六个window,通过ace-window管理。
没关系的,每个人有自己的喜好,这么多窗口你的屏幕一定很大咯?
zhscn
16
在公司用的28寸的屏幕,差不多正好等分成六个window,lsp hierarchy和xref占两个。
1 个赞
zhscn
17
发现blace-windows
会修改tab的大小。
这个想法很妙,我一直苦恼于没有标签不直观,有标签了却影响纵向面积。
awesome-tray能不能嵌到tab里,作为一个固定的右侧tab
考虑过,但是我觉得放到 awesome-tray 里面更好,因为 minibuffer 去不掉, minibuffer 右边那么多空白是更好的地方,节省标签的空间。
1 个赞