大家好,我是一个多年的 Vim 用户。在使用 Emacs 的时候,发现窗口管理很讨厌和 Vim 对比起来,在此请教一下有什么好的方法解决吗?(我查看了文档并尝试上网搜索但是由于我是 Emacs 新手,可能会有遗漏的解决方案没有发现)
这里考虑的是原始的 Emacs 键位,不考虑 evil-mode 插件
窗口管理:
- 每次在 compile 或者 grep 等类似的窗口,通过回车或其他方式跳转文件的时候,会打开一个新的窗口。如果是 grep 想多次查看各个文件的匹配行附近内容的时候,会自动打开非常多的窗口非常麻烦。(Vim 会替换进入 quickfix 时的窗口内的缓冲区)
- 切换窗口似乎只有 C-x o,如果是多窗口切换会不太方便。我看到一些插件会给窗口打上标号。但是这样每次切换都还要看一眼窗口的编号是多少,就像 vim 的 easymotion 插件一样多一个步骤,尝试过不是很喜欢这种方式。vim 的 c-w hjkl 移动我一直感觉是很不错的。是否是因为 Emacs 的哲学,它不推荐用户使用多窗口?(其实在 Vim 中我也很少会使用超过两个窗口,但是 Emacs 会经常打开 compile 窗口,三个窗口及以上似乎 C-x o 就不方便了)
(setq display-buffer-alist
'(((lambda (bufname _)
(memq this-command '(diff-goto-source vmacs-cancel-selection
vc-annotate-goto-line
flymake-show-project-diagnostics
vc-annotate-goto-revision-line
vc-annotate
vc-annotate-find-revision-at-line
log-edit-done
push-button vc-git-stash-show-at-point
next-error previous-error compile-goto-error)))
(display-buffer-same-window )
(inhibit-same-window . nil))
)
)
我是这么做的。
你好,我是一个多年 Emacs + 触控板用户,不太能理解为什么 Vim 用户都拒绝用鼠标点点
谢谢,但好像不是符合我的预期。因为我尝试在 grep 窗口中按 C-o 查看的时候,还是会打开很多窗口。
先不考虑大家常说的手一直在键盘和鼠标切换导致思路切换的问题。因为我这些年以来鼠标用的多,导致手指疼痛,所以是没有办法了。而且可能是我的工作哲学问题,我尝试过 gnome kde xfce 等各个桌面,最后还是切换到了 i3wm 而且用了很多年非常舒适。
我想尽量用键盘而不是鼠标,应该也是 Emacs 的设计哲学吧。如果要频繁使用鼠标,我想这可能是 acme 或 vscode 这样的编辑器的设计哲学。
我认真开始用 GNU Hyperbole 也快五年多了,体验和 acme 已经很像了。
1 个赞
谢谢,我因为手疼,所以想寻找一个不用鼠标的解决方案。如果将来我手疼缓解,可能会去尝试一下主要依赖鼠标的工作流。
那你要看看 C-o 执行的是什么命令,像我那样加入这条命令就行。
wsug
9
虽然我不用解控版,不过触控版和鼠标应该不一样吧,触控版和空格键连在一起的那种,手应该不用离开键盘也可以点来点去
可以用 windmove, Shift + arrow 跳转
display-buffer-alist 这个参数控制 window 的创建逻辑, 比如出现的位置高度重用之前已有的 window 等
1 个赞
我个人的习惯是一个屏幕上只展示一到两个 buffer,需要切换的时候直接搜索 buffer name。
然后我会给不同的 buffer 类型加上特殊的标记/前缀,比如终端是 # 开头,AI Agent 是 @ 开头,telegram 聊天窗口是 { 开头。有些已经有前缀的(比如 magit buffer 都会有 magit 这个词出现)就不需要自己加了。
需要搜索的时候只需要搜索前缀就可以切换。
ksqsf
12
我没有这个问题?默认配置会复用之前的窗口的,不会一直开新的。
windmove,内建功能。
Emacs 的哲学就是想怎么用就怎么用 
可以使用 repeat-mode(内建功能),也可以换个绑定,比如 M-o 。
我是一个才4年的Emacs用户,感觉有资格回答这个问题。不谈什么打断心流之类的玄学,我右手使用鼠标(mx master)或者苹果的触摸板手疼,主要表现为中指的关节疼。我试过食指(左键+滚轮)中指(右键)操作,食指(左键)中指(滚动)无名指(右键),都不能缓解疼痛。相对于Emacs用户常说的小拇指疼痛,和这个比起来不值一提。因此我现在倾向于能键盘操作就键盘操作,不能的再用鼠标。
2 个赞
谢谢
如果不用脑子过一层,这样切换窗口确实也是一个不错的办法。我之前尝试过,每次切换总要看看窗口 id 然后再按。
要是有办法让 emacs 不要自己打开额外窗口,然后再这样能切换窗口感觉就好了。emacs 的 grep 会自动给我打开一大堆窗口 
用popwin,它可以在你切窗口的时候自动关闭popup窗口。
1 个赞
推荐使用popper,设置下 popper-reference-buffers,把不相关的窗口自动bury了。个人还配置用C-g关闭这些窗口,C-h z还可以找回,这样剩下的就清爽了。
1 个赞
对于 ace-window,我是开启了 (ace-window-display-mode 1), 会在 mode-line 下显示窗口的编号。这个时候切换窗口的思维模式就变成了,先看想要切换到那个窗口,知道编号,按下按键。(而不是要按下按键之后等待数字弹出),这样或许可以帮助你熟悉 emacs 的 window 排布顺序。
至于 grep 会弹出大量的窗口,我是不太理解。我个人使用 consult-rg 是没有遇到过打开一堆窗口的问题的。或许可以举个例子,或者发个截图。
1 个赞
哎呦,糟糕。我好像发现原因了。我最开始用 compile 的时候,发现 emacs 会智能的把 compile-mode 窗口左右上下分屏很烦人。我希望强制上下窗口分屏,就加了这个 (setq split-height-threshold 0),后来就忘了。当前还不了解 emacs 的错误跳转。再后来慢慢发现了这个错误跳转之后,误以为这就是原生行为了… 
感谢。在你说这个之前,我还以为大家都是这个行为。
1 个赞