VSCode有一个shift-tab键,按住shift可以显示所有的标签,然后按tab在各个标签切换,松开shift切换到选择的标签。我以前用的时候觉得巨方便。不过emacs上没有按住某个键的选项,所以这个方法跟VScode的不完全一样。
我平时用evil,所以快捷键设置到evil的normal mode上了。
演示
shift+tab: 打开菜单
tab: 下一项
j: 下一项
k: 上一项
enter: 选择
代码
buffer-switch-max
: 最多显示的buffer数,我设置到了5。不设置的话会显示所有的buffer
(define-key evil-normal-state-map (kbd "<S-tab>") 'buffer-switch)
;; keymap used in the popup menu
(setq switch-keymap (make-sparse-keymap))
(define-key switch-keymap (kbd "<tab>") 'popup-next)
(define-key switch-keymap (kbd "j") 'popup-next)
(define-key switch-keymap (kbd "k") 'popup-previous)
(define-key switch-keymap (kbd "<return>") 'popup-select)
(setq buffer-switch-max 5)
(defun buffer-switch ()
(interactive)
;; all the buffers
(setq full-buffer-list (mapcar (function buffer-name) (buffer-list)))
(if buffer-switch-max
(progn
;; if max specified, only take n buffers
(setq buffer-select-list (subseq full-buffer-list 0 (- buffer-switch-max 1)))
)
;; if not specified, take all
(setq buffer-select-list full-buffer-list)
)
(setq dest-buffer (popup-menu* buffer-select-list :keymap switch-keymap))
(switch-to-buffer dest-buffer)
)
大家有什么意见建议吗OvO
2 个赞
Spacemacs 有个叫 transient-state 的界面接口,如果你想再增加些功能的话可以它用来实现更复杂的界面。
Space bb, space bi满足不了你了吗。。。
相信我,肯定还是SPC bb快,毕竟手都不用移动位置
经过时间检验的快捷键 当你习惯之后 完全能满足你的要求 不用费心去找其他的 其实也就多点一下少点一下的问题
SPC b b
一天要摁几千次,我设为了normal-state下的RET
,and never looked back
伸个手,transient-state比原版hydra有什么更舒服的地方不?
LdBeth
11
就是个提供更多定制的封装宏啊。有些功能写起來更容易点。
我是有一个快捷键在最近两个buffer之间切换, 有一个在最近三个之间切换
第一个直接绑定到tab
第二个借助karabiner 按住点号再按tab
emacs里按住某个键切换状态我都是用karabiner完成
快捷键不在多,多了是负担:
<prefix> b b helm-mini
<prefix> b l switch-to-latest-buffer
<prefix> b n switch-to-next-buffer
<prefix> b p switch-to-prev-buffer
我实际只用到了 bb
和 bl
,而 bn
和 bp
几乎是摆设。
所有操作应该分为两大类,一类是确定的,就像 bl
,可以闭着眼睛放心地按,另一类是不确定的,就像 bb
,需要一点思考或眼睛辅助,楼上说的切换第三、四…项的键在我看来都属于不确定的。
如果有 helm
的话,其实 bb
可以取代 bl
之外的绝大部分键了,按一组快捷键,并不会比搜索 buffer 名称更快/准。虽说如此,我还是把 avy 给加进来了:
avy-goto-helm-buffer-line.el
bb
之后再按 C-l
然后选择 asdfghjk...
任意一行:
这组按键顺序是固定的,所以也就相当于有了选择第三、四、五。。。项的快捷键了。
2 个赞
avy的goto-char还好,goto-line总觉得很鸡肋,helm/ivy里面asdf看过来,早把名字输完了,编辑时有相对行号的话也比avy-goto-line快。
我在切换 buffer 的时候其实还是以输入名称为主,比较可能用到的场景就是 buffer 名称相似性太高,才会用 goto-line。
goto-line 其实也可以改成显示数字的,但是我觉得数字键比较远,盲打容易按错。asdf 刚好就是最自然的状态下,手指从左到右 1234 排列。
另外,goto-line/word/char 用在多窗口切换的时候很方便,比 switch-window 之类的方法还好用。
1 个赞
问一下switch-to-latest-buffer是哪个包带的
好像没有哪个包自带这个命令吧,一般是自己写(抄)的。
现在回头看当时写的代码好多问题啊
我现在也绑定到RET上了,RET RET就是last buffer,很巧妙