情形一:比如用 C-x C-b 列出 buffer (不考虑用 C-x b 后输入的情况), 然后需要用 C-x o 切过去,按 n or p 回车切换, 感觉很不方便
情形二:执行 M-x sdcv-search-pointer 后,会出现查词结果的 buffer, 同时光标焦点也会跳到这个buffer 的第一个字符后(-|->>),也要按 C-x o 来返回原来单词所在的 buffer
情形一:比如用 C-x C-b 列出 buffer (不考虑用 C-x b 后输入的情况), 然后需要用 C-x o 切过去,按 n or p 回车切换, 感觉很不方便
情形二:执行 M-x sdcv-search-pointer 后,会出现查词结果的 buffer, 同时光标焦点也会跳到这个buffer 的第一个字符后(-|->>),也要按 C-x o 来返回原来单词所在的 buffer
:bind (:map sdcv-mode-map
("o" . other-window))
当前不可见的 buffer 我一般就用 C-x b,当前可见的 buffer 我是绑了 M-方向键给 windmove。 https://github.com/MetroWind/dotfiles-mac/blob/60eed187cc58044166c88081039299e1faa2656e/emacs/files/.emacs-pkgs/mw-generic.el#L162
我这样配置的,最近一次的buffer来回切换用tab
,其他的按,bb
,bo
(evil-define-key '(normal visual motion) 'global (kbd "<leader>bb") 'switch-to-buffer)
(evil-define-key '(normal visual motion) 'global (kbd "<leader>bo") 'switch-to-buffer-other-window)
(define-key evil-normal-state-map (kbd "<tab>") 'evil-switch-to-windows-last-buffer)
对于你上面提到的情形2,用evil-mode
的话可以直接C-o
返回跳转的来源位置
窗口相关的快捷键这样配置的
(evil-define-key '(normal visual motion) 'global (kbd "M-1") 'winum-select-window-1)
(evil-define-key '(normal visual motion) 'global (kbd "M-2") 'winum-select-window-2)
(evil-define-key '(normal visual motion) 'global (kbd "M-3") 'winum-select-window-3)
(evil-define-key '(normal visual motion) 'global (kbd "M-4") 'winum-select-window-4)
(evil-define-key '(normal visual motion) 'global (kbd "M-0") 'kill-buffer-and-window)
(evil-define-key '(normal visual motion) 'global (kbd "M-o") 'delete-other-windows)
(evil-define-key '(normal visual motion) 'global (kbd "M-/") 'split-window-right)
(evil-define-key '(normal visual motion) 'global (kbd "M--") 'split-window-below)
(use-package shackle
:ensure t
:hook (after-init . shackle-mode)
:init
(setq shackle-default-alignment 'right))
我用的evil,用快捷键 C-w C-w
或者 C-w w
,但是我用C-w h/j/k/l
比较多,同时我把自己常用的都绑定到以空格为leader key,自己定义了按键 SPC w
到 C-w
上,所以基本上我也会按SPC w h/j/k/l
。
切换到之前的buffer,
(defun my-switch-to-previous-buffer ()
"Switch to previous buffer."
(interactive)
(switch-to-buffer nil))
快捷键我设为,bb
. 很多发行版都有类似操作.
另外切换buffer自动完成插件都有支持, 比如经典的counsel/ivy,
或基于已有api开发新命令,
我自己设置了一个快捷键:M-o
感谢上面各位的指点分享,我先消化下,然后再在此楼编辑更新学习感想,谢谢!
盲猜是use-package? 这个思路好,目前照你的语句设置(define-key sdcv-mode-map (kbd "o") 'other-window)
因为不用 evil ,所以还不会,在考虑要不要学习下
本想参考这个思路改一下 sdcv.el 里的 sdcv-search-pointer ,花费数个小时没能成功
目前也不纠结了,直接用上面说的o来切换及 sdcv-search-pointer+ 吧
也许哪天再入门一点再回来看看是不是有可能解决
总之,谢谢大家(包括没单独引用的朋友)
C-x o
用习惯了没有觉得有什么不方便。。。
没有用 windmove 的吗?
我统一使用 C-x o。以前还试用 M-o, 不过习惯了掌压 Ctrl 后,其实 M-o的还不如 C-x o 方便,后来索性就直接 C-x o 了。
切换看不见的buffer 用 C-x b,直接输入进行预览(有 consult 加持),从来不用 C-x C-b。
有把C-xo改成M-i,M-o的方案
consult-buffer绑定到C-xb挺好用的
你也可以改一下C-xo的行为,如果当前只有一个buffer,就先consultbuffer再C-xo
改到了C-<tab>
使用的默认配置。 C-x C-b 很少用,除非要关闭多个buffer了。
C-x b 切换buffer很好用, 有个补全的插件,不需要输入完整的名字,只要输入几个特征字符一般就能明确出来了, 感觉在多个文件之前切换非常方便。
如果切换最近访问的两个buffer, 直接 C-x b Enter 就行了, 感觉也很方便; C-x b 之后还能按照最近最近访问的顺序进行选择, 也很方便。
C-x o 一般只在分割了多个window的时候使用。 使用频率不高。
补充:我的Ctrl 键是 CapsLock 键,长按是Ctrl, 短按是 CapsLock, 所以所有Ctrl 组合键用起来都很顺畅。
doom,按SPC , 选择,自己绑了SPC K/L来切换上一个/下一个
我是开的一个阅读,一个查词窗口同屏显示
所以 C-x o 用的多,如果 C-x b的话来回切不方便
想想是不是我的标题有问题,本质上至今也没搞懂窗口和缓冲区的区别
一般来说, 缓冲区和文件、某个功能是关联的; 窗口则是可以显示任何缓冲区。 界面上通过分割的形式显示多个内容(缓冲), 就是多个窗口了。
你的情况确实是切换窗口很多(C-x o), 可以给切换窗口绑定一个快捷键, 会方便很多。
我一般都是alt+1, alt+2, alt+3, 从来不用c-x o.
用ace-window + C-x o