你们用 C-x o 来切换缓冲区吗

情形一:比如用 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))
1 个赞

我用的evil,用快捷键 C-w C-w 或者 C-w w,但是我用C-w h/j/k/l比较多,同时我把自己常用的都绑定到以空格为leader key,自己定义了按键 SPC wC-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 来切换缓冲区吗 - #3,来自 MetroWind

我统一使用 C-x o。以前还试用 M-o, 不过习惯了掌压 Ctrl 后,其实 M-o的还不如 C-x o 方便,后来索性就直接 C-x o 了。

切换看不见的buffer 用 C-x b,直接输入进行预览(有 consult 加持),从来不用 C-x C-b

2 个赞

有把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 组合键用起来都很顺畅。

2 个赞

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

1 个赞