区别emacs同名buffer

件同名是经常出现的事,其他编辑器是咋样的我不清楚,未经过配置的Emacs会在同名buffer后面加上<2><3>这样的序列来区分。但是这种做法并不直观,同名的buffer开多了就会搞混了。

事实上emacs已经提供了保持每个buffer名唯一的功能,在菜单栏依次点击 Help > Search Documentation > Lookup Subject in User Manual(抱歉,我一直没找到这个菜单项对应的命令……),然后在mini buffer里输入uniquify的话就能看到相应信息了。

要使用uniquify,首先需要启用它,在 .emacs.el 里加入如下语句将启用该模式:

(require 'uniquify)

嗯,发现执行完后开启同名文件和以前没有什么变化?别急,因为你还没有为uniquify指定buffer名称样式。指定样式的参数名为 uniquify-buffer-name-style ,它接受以下五种值,以文件 /foo/bar/mumble/name/baz/quux/mumble/name 为例,相应的效果是:

  • forward bar/mumble/name quux/mumble/name
  • reverse name\mumble\bar name\mumble\quux
  • post-forward name|bar/mumble name|quux/mumble
  • post-forward-angle-brackets name<bar/mumble> name<quux/mumble>
  • nil name name<2>

可以看到,Emacs会为buffer名称添上最短的足以区别的路径,并不会把整个路径都附加上去导致buffer名称过长反而不容易辨认的问题,这点是相当人性化的。你可以通过如下代码设置显示样式:

(setq
  uniquify-buffer-name-style 'post-forward)

对于 post-forwardreverse 来说,还有一个参数—— uniquify-separator ——可以设置,前者设置的是buffer name和后缀的分隔符,而后者设置的是所有的分隔符,童鞋们可以根据自己的喜好进行设置,例如我使用的是

(setq
  uniquify-separator ":")

OK,将配置好的 .emacs.el 存好,从此以后摆脱无意义的<n>的buffer name吧 :)

发表评论

评论备注:

  1. 留言时的头像是Gravatar提供的服务。
  2. By submitting a comment here you grant this site a perpetual license to reproduce your words and name/web site in attribution. So, you don't fully own your words, so to speak.