在香草Emacs中,我必须做C-x b
,然后手动键入要切换的缓冲区名称。如果忘记了缓冲区的名称,则必须点击TAB
以列出可能的补全。我可以做些什么来加快此过程的速度吗?
C-x C-<left/right>
用来快速切换缓冲区。当需要切换到“更多”缓冲区时,我使用IBuffer
。
在香草Emacs中,我必须做C-x b
,然后手动键入要切换的缓冲区名称。如果忘记了缓冲区的名称,则必须点击TAB
以列出可能的补全。我可以做些什么来加快此过程的速度吗?
C-x C-<left/right>
用来快速切换缓冲区。当需要切换到“更多”缓冲区时,我使用IBuffer
。
Answers:
有应该帮助的ido模式。
编辑:
将其放入您的init文件中,以默认激活ido模式:
(ido-mode 1)
现在,C-x b
将向您显示候选人列表。
如果您希望垂直显示项目,请将其放入您的init文件中:
(setq ido-separator "\n")
让我也建议这篇文章谈论切换到上一个/下一个缓冲区。
我最近开始使用C-x <left>
和C-x <right>
。这些都是标准的Emacs绑定-无需配置。左移将您带回到上一个缓冲区(最初与相同C-x b RET
),但是再次执行该操作会将您带到最近访问的第三个缓冲区。如果您在3个或4个缓冲区之间来回弹出很多,那么我发现它比尝试记住缓冲区名称要容易得多。
我也刚刚发现C-x C-<left>
并C-x C-<right>
绑定到相同的功能,因此您可以按住Control键并在x和箭头之间交替来翻动缓冲区。挺好的!
您可以使用Helm。
在我的设置中,我已切换C-x b
为M-l
。这与helm-buffers-list
,至少对于我而言,使处理过程非常快。
ido
or或iswitchb
or之类的icicles
东西,但是Helm基本上已淘汰了它们。是的,ace-jump-buffer
很酷,但是不如Helm快,因为在您知道要按什么键之前,您必须在列表中找到缓冲区。Helm允许您使用一些已知的击键(例如缓冲区的名称)来缩小列表的范围。我C-TAB
用来切换缓冲区,加载最近的文件,书签等。没有什么比这更快的了。
helm
。但我更喜欢使用helm-mini
,这也说明你Recentf
对helm-buffers-list
。
ivy-switch-buffer
。
只是为了增加我已经提到的Ido使用的调整:
(require 'ido)
(require 'ido-hacks)
(require 'flx-ido)
(require 'ido-vertical-mode)
(ido-mode 1)
(flx-ido-mode 1)
(ido-hacks-mode 1)
(ido-everywhere 1)
(ido-vertical-mode 1)
(setq ido-enable-flex-matching t
ido-use-filename-at-point 'guess
ido-vertical-define-keys 'C-n-C-p-up-down-left-right))
我还使用ace-window
到缓冲区间切换一起ace-jump-mode
到跳可见窗口之间。附带一些习惯但值得尝试。
我将其与之结合使用key-chord-mode
,so
可以快速跳转:
(key-chord-define-global "so" 'ace-window)
所有上述软件包都可以通过Melpa的软件包管理器获得。
use-package
与require
防止混淆。在给定的示例中,用户无需特别安装其他软件包即可实施该解决方案。
正如@kuanyui在评论中所说,next-buffer
&previous-buffer
很快,如果您只有几个缓冲区可以循环。(我使用了不止几个,还有更多的缓冲区选择功能icicle-buffer
。)
但是,默认情况下,next-buffer
并且previous-buffer
位于前缀键上C-x
。
这意味着它们是不可重复的:你不能只是命中C-x <right> <right> <right>...
。相反,您必须将这些命令绑定到不同的可重复键,或者必须使用C-x <right> C-x <right> C-x <right>...
,这不是很快。
对于这些命令的可重复版本,请加载库misc-cmds.el
并将不可重复的原始版本重新映射到此处定义的可重复版本:
(global-set-key [remap previous-buffer] 'previous-buffer-repeat)
(global-set-key [remap next-buffer] 'next-buffer-repeat)
(类似地,在同一个库中undo
,即使在前缀键上也可以找到可重复的版本undo-repeat
。)
顺便说一句,您可以使用(from )函数使几乎所有命令可重复(即使在前缀键上也是如此)。这是定义以下可重复版本所需的全部工作:repeat-command
misc-cmds.el
next-buffer
(defun previous-buffer-repeat ()
"Switch to the previous buffer in the selected window.
You can repeat this by hitting the last key again..."
(interactive)
(require 'repeat nil t) ; Library `repeat.el' is in Emacs 22.1 and later
(repeat-command 'next-buffer))
C-,
和C-.
以获得可重复性,无论如何,在它上时,将C-x.
and 设置C-x,
为other-window
and (lambda()(interactive)(other-window -1))
。骑自行车的窗户可能需要更少的可重复性,并且一分钟之内就可以摆脱多余的包裹。
next-buffer
和previous-buffer
最佳解决方案。因此,我的评论。
使用helm-buffer-list或helm-mini在视觉上选择缓冲区条目和模糊匹配。它可以在切换缓冲区之外做很多事情。您应该在链接中看到该演示。
其他人则讨论了有助于使缓冲区/窗口/帧切换更轻松的软件包。(我个人helm
认为这是惊人的。)我想讨论更简单的更改,这些更改可以使Emacs体验更加愉快。
对我来说,解决缓冲区/帧问题的方法(因为我认为C-x o
是最糟糕的)不是一个解决方案。这很简单:
C-;
到other-window
(通过Windows循环)C-'
到other-frame
(通过帧循环)。添加此快捷方式后,实际上我开始更多地使用框架了。help
弹出窗口非常有用) (在阅读手册页,宣传手册等时),而以前没有看到任何窗口。我还以为我会分享一些关于键绑定的想法,新手可能会觉得有用。(很抱歉,如果这是错误的地方。)我没有具体的建议,而是一种“哲学”,可以让我为自己保持一套有效的键绑定。
不常用的命令不应该使用简单的键绑定。
keyfreq.el
并查看您实际使用的内容。我使用适者生存法来确定哪些命令被授予键盘上最有价值的房地产。C-\
是一个很好的捷径(出于#2中讨论的原因)...并且将其映射到其默认命令:是一种犯罪change-input-method
。(也许你们中的一些人经常使用它,我当然不会。)以下因素决定了键盘快捷键的简便性和速度(从最重要的开始):
Ctrl
,Meta
等)。例如,对我而言,击中C-c C-l C-p
要比击中要快得多C-x o
。我个人觉得Ctrl
在给定键序列的连续两次击键之间必须拔下键非常不方便。仅需不断合并修改器按钮(在本例中为Ctrl
)就容易得多。(此特定示例可能受到我重新映射Ctrl
密钥和Caps-Lock
密钥的影响。)C-c C-l C-p
要比击中要快得多C-p C-' C-;
。(尝试一下,应该很明显。)通常来说,使用交替使用手(或至少同一只手指交替使用)的击键序列要容易得多。 我认为可能仅对新手有用的几点想法。我可能以后再添加一些。
我使用windmove.el
和bs.el
快速切换缓冲区。这两种模式都包含在Emacs中。
windmove.el
- 沿指定的方向(例如,左,右,上,下)切换到窗口(当前显示的缓冲区)。
bs.el
-我使用bs-cycle-next
和bs-cycle-previous
切换到窗口中当前未显示的下一个缓冲区。
您可以设置windmove与(windmove-default-keybindings)
将结合到适当的命令Shift-Left Arrow
,Shift-Right Arrow
等等。
为了进行设置bs.el
,类似这样的方法将起作用:
(global-set-key [(f9)] 'bs-cycle-previous)
(global-set-key [(f10)] 'bs-cycle-next)
windmove.el
它位于EmacsWiki页面的“切换缓冲区”下,并且可以bs.el
在缓冲区而不是Windows上运行。
我知道的最快切换缓冲区的方法是使用ace-jump-buffer
。一键打开缓冲区菜单,然后选择要使用的缓冲区旁边的字母ace-jump-line-mode
。这最适合26个左右的最新缓冲区。要切换到使用历史中更远的缓冲区,ido-switch-buffer
始终是一个不错的选择。
广义地说,有两种切换缓冲区的方法,大多数解决方案都属于其中一种。
这是C-x b
默认情况下的功能。Ido为您提供了很好的自动完成功能,因此您不需要那么麻烦。像helm,projectile等项目使您能够使用项目等中的文件,从而使其变得更加容易,并且与ido一起使用时,它们可能非常有用。
当您有太多缓冲区并且想要所有缓冲区列表时,这很有用。您可以上下移动缓冲区,然后按Enter键访问特定文件。Ibuffer对此非常有用。
我同时使用这两种方法,这是设置方法。
(global-set-key (kbd "C-x C-b") 'ido-switch-buffer)
(global-set-key (kbd "C-x b") 'ibuffer)`
除了ido,我还有以下设置。
在邪恶模式下,请使用以下按键绑定来切换缓冲区
(define-key evil-normal-state-map (kbd "C-j") 'next-buffer)
(define-key evil-normal-state-map (kbd "C-k") 'previous-buffer)
(define-key evil-normal-state-map (kbd "C-S-h") 'evil-window-left)
(define-key evil-normal-state-map (kbd "C-S-j") 'evil-window-down)
(define-key evil-normal-state-map (kbd "C-S-k") 'evil-window-up)
(define-key evil-normal-state-map (kbd "C-S-l") 'evil-window-right)
将缓冲区名称设置为窗口标题。当使用上述键绑定进行导航时,这将为您提供帮助
(setq frame-title-format "%b")
如果您使用邪恶模式,则可以尝试evil-leader
。将常用密钥绑定到领导者。例如,您可以绑定C-x b
到<leader>-b
。
(global-evil-leader-mode)
(evil-leader/set-leader ",")
(evil-leader/set-key
"b" 'switch-to-buffer)
将Dired模式绑定到C-<f8>
。现在,当您要在目录中打开文件时,按C-<f8>
,导航到文件名,然后按a
代替RET
。因此,缓存缓冲区将立即被杀死。
(global-set-key (kbd "C-<f8>")
(lambda ()
(interactive)
(dired default-directory)))
(put 'dired-find-alternate-file 'disabled nil)
使用recentf
模式浏览最近的文件。C-x C-r
最后一个要点是-使用符合人体工程学的机械键盘。因此,您可以用手腕轻松快速地按“ ctrl”键,而不会伤及小指。
希望这可以帮助某人。
从其他答案中可以看出,有许多方法可以简化此特定任务。我个人使用Lusty Emacs作为缓冲区切换设备,因为它可以很好地处理模糊补全。这样可以最大程度地减少选择新缓冲区所需的击键次数,例如,我只需要键入oxr即可切换到ox-reveal.el,甚至第二次也只需一次,因为它也可以跟踪切换的历史记录。
如果您只想不断浏览缓冲区,请将其添加到您的init文件中:
(bind-key* "M-l" 'next-buffer)
(bind-key* "M-k" 'previous-buffer)
您确实需要bind-key程序包,并且可以按自己的意愿更改键绑定,但是我发现这些键绑定最舒适。在添加此代码段之前,您需要通过以下方式要求bind-key:
(require 'bind-key)
我像一般应用程序一样使用C-Tab和CS-Tab。
(defun change-buffer-until-normal (change-fn)
(let (current (buffer-name))
(funcall change-fn)
(while (and (string-prefix-p "*" (buffer-name))
(not (eq current (buffer-name))))
(funcall change-fn))))
(defun my-next-buffer ()
(interactive)
(change-buffer-until-normal 'next-buffer))
(defun my-prev-buffer ()
(interactive)
(change-buffer-until-normal 'previous-buffer))
(global-set-key [C-tab] 'my-next-buffer)
(global-set-key [C-S-iso-lefttab] 'my-prev-buffer)
在我的VM上,Cx ALT-RIGHT / LEFT太慢。在执行其他任何操作之前,我必须等待Cx在状态栏中注册。加上太多的键 所以我将C-TAB和CM-TAB映射到next和prev缓冲区,因为无论如何我都是在大多数Windows程序中这样做的。在emacs中很容易做到:
M-x
将您带到状态栏。然后键入global-set-key
,将提示您输入要绑定的键序列(C-TAB
),然后输入希望将其绑定到的命令(next-buffer
)。而已!