缓冲区之间的Emacs选项卡

缓冲区之间的Emacs选项卡,emacs,elisp,Emacs,Elisp,有没有一种方法可以在缓冲区之间切换,而无需通过 缓冲区列表,还是写入要切换到的缓冲区的名称?更具体地说,我想知道emacs是否可以在缓冲区之间切换,就像它在notepad++emacs 22.1和更高的上一个缓冲区(C-x)和下一个缓冲区(C-x)命令中的工作方式一样 这两个命令可以通过使用添加到较旧的Emacsen中。我从来没有使用过C-x或C-x,因为如果我想循环超过一个缓冲区,我发现重复它们很麻烦,因此,我刚刚编写了两个函数,允许您继续切换到next/previous buffer,如果最

有没有一种方法可以在缓冲区之间切换,而无需通过 缓冲区列表,还是写入要切换到的缓冲区的名称?更具体地说,我想知道emacs是否可以在缓冲区之间切换,就像它在notepad++

emacs 22.1和更高的
上一个缓冲区(
C-x
)和
下一个缓冲区(
C-x
)命令中的工作方式一样

这两个命令可以通过使用添加到较旧的Emacsen中。

我从来没有使用过C-x或C-x,因为如果我想循环超过一个缓冲区,我发现重复它们很麻烦,因此,我刚刚编写了两个函数,允许您继续切换到
next/previous buffer
,如果最后一个命令也是
next/previous buffer
命令

e、 g.C-x会带你回到三个缓冲区,向前一个,然后再向后一个

我假设&通常绑定到
向前/向后单词
,并将它们显式地称为回退

(defun my-forward-word-or-buffer-or-windows (&optional arg)
  "Enable <C-left> to call next-buffer if the last command was
next-buffer or previous-buffer, and winner-redo if the last
command was winner-undo or winner-redo."
  (interactive "p")
  (cond ((memq last-command (list 'next-buffer 'previous-buffer))
         (progn (next-buffer)
                (setq this-command 'next-buffer)))
        ((memq last-command (list 'winner-redo 'winner-undo))
         (progn (winner-redo)
                (setq this-command 'winner-redo)))
        (t ;else
         (progn (forward-word arg)
                (setq this-command 'forward-word)))))

(defun my-backward-word-or-buffer-or-windows (&optional arg)
  "Enable <C-left> to call previous-buffer if the last command
was next-buffer or previous-buffer, and winner-undo if the last
command was winner-undo or winner-redo."
  (interactive "p")
  (cond ((memq last-command (list 'next-buffer 'previous-buffer))
         (progn (previous-buffer)
                (setq this-command 'previous-buffer)))
        ((memq last-command (list 'winner-redo 'winner-undo))
         (progn (winner-undo)
                (setq this-command 'winner-undo)))
        (t ;else
         (progn (backward-word arg)
                (setq this-command 'backward-word)))))

(global-set-key (kbd "<C-left>") 'my-backward-word-or-buffer-or-windows)
(global-set-key (kbd "<C-right>") 'my-forward-word-or-buffer-or-windows)
(取消我的转发字、缓冲区或窗口(&可选参数)
“如果最后一个命令是
下一个缓冲区或上一个缓冲区,如果最后一个缓冲区
命令是winner undo或winner redo。“
(交互式“p”)
(cond((memq last命令(列出“下一个缓冲区”和上一个缓冲区))
(progn(下一个缓冲区)
(设置此命令“下一个缓冲区”))
((memq最后一个命令(列出“winner redo”winner undo))
(程序(优胜者重做)
(设置此命令“winner redo”))
(t)其他
(progn(正向字arg)
(设置此命令“转发单词(()())”)
(取消我的向后字、缓冲区或窗口(&可选参数)
“如果最后一个命令
是下一个缓冲区还是上一个缓冲区,如果最后一个缓冲区
命令是winner undo或winner redo。“
(交互式“p”)
(cond((memq last命令(列出“下一个缓冲区”和上一个缓冲区))
(progn(上一个缓冲区)
(设置此命令的“上一个缓冲区”))
((memq最后一个命令(列出“winner redo”winner undo))
(程序(优胜者撤销)
(设置此命令的“撤消”))
(t)其他
(progn(向后单词arg)
(设置此命令“向后单词(()())”)
(全局设置键(kbd“”)“我的反向字或缓冲区或窗口)
(全局设置键(kbd“”)“我的前向字或缓冲区或窗口)
(我自己使用进行缓冲区切换,但是…)

如果要重复上一个命令任意次数,只需使用C-x z。。。在这种情况下,例如,C-x左C-x z z

如果这太麻烦了,可以像其他人建议的那样,将
(下一个|上一个)-buffer
绑定到其他可重复的键

但可重复使用的钥匙需求量很大。如果你不想浪费任何时间,你甚至可以把这样的命令放在前缀键上,这样,例如,你可以做,例如,C-x左。。。下面是一个技巧(摘自代码):

(取消我的重复命令(命令) “重复命令。” (let((重复消息功能“忽略”) (setq最后一个可重复命令) (重复零次) (取消我的下一个任意重复(arg);'C-x right' “不管怎样,跳到第n个。 N默认为1,表示下一个值。 简单的‘C-u’意思是从头开始(不要重复)。” (交互式“P”) (要求“重复”) (我的重复命令“下一步”) (定义键ctl-x-map[右]'我的下一个重复
尽管以下建议确实使用了缓冲区列表、常春藤(或头盔)和邪恶,但我认为这是一种很好的方法,几乎等同于使用SpaceMac时常用的
Ctrl-TAB
方式(包括更新缓冲区列表)。 当然,这些命令可以根据您的个人配置进行调整(香草Emacs)

(邪恶全局设置键“运动(kbd)”)“常春藤开关缓冲区)
(邪恶全局设置键“插入(kbd)”)“常春藤开关缓冲区)
(定义键常春藤模式图(kbd“”)“常春藤下一行并呼叫)
(定义键常春藤模式映射(kbd“”)“常春藤上一行和呼叫)
或等效于头盔

(evil-global-set-key 'motion (kbd "<C-tab>") 'helm-buffers-list)
(evil-global-set-key 'motion (kbd "<C-iso-lefttab>") 'helm-buffers-list)
(define-key helm-map (kbd "<C-tab>") 'helm-follow-action-forward)
(define-key helm-map (kbd "<C-iso-lefttab>") 'helm-follow-action-backward)
(邪恶全局设置键“运动(kbd)”)“头盔缓冲区列表)
(邪恶全局设置键“运动(kbd)”)“舵缓冲列表”
(定义关键舵图(kbd“”)“舵随动前进”)
(定义关键舵地图(kbd“”)“向后舵跟随动作”)
最后一个命令的按键串在我的键盘上表示
Ctrl-Shift-tab
。您可以找到与
C-h k C-S-tab
一起使用的按键串

实际上,在释放
后,您仍然需要按
RET
C-l


对于使用头盔的邪恶用户,一个可能更好的选择是将
Helm buffers list
绑定到
C-j
C-k
,然后将
Helm follow mode persistent
设置为
t
,并在
Helm buffers list
中使用
C-C-f
激活
Helm follow mode
。现在您可以进行switch(和预览)带有
C-j
C-k

的缓冲区是的,请参阅我回答中第一个链接中的
在两个最近使用的缓冲区之间切换一节。这个问题也会被问到(并且回答不同)关于超级用户:我尝试了很多,但随着时间的推移,我最终停止了一个简单的iflip包,你会发现几乎没有比“C-x b”+ido模式更好的切换了
(evil-global-set-key 'motion (kbd "<C-tab>") 'ivy-switch-buffer)
(evil-global-set-key 'insert (kbd "<C-iso-lefttab>") 'ivy-switch-buffer)
(define-key ivy-mode-map (kbd "<C-tab>") 'ivy-next-line-and-call)
(define-key ivy-mode-map (kbd "<C-iso-lefttab>") 'ivy-previous-line-and-call)
(evil-global-set-key 'motion (kbd "<C-tab>") 'helm-buffers-list)
(evil-global-set-key 'motion (kbd "<C-iso-lefttab>") 'helm-buffers-list)
(define-key helm-map (kbd "<C-tab>") 'helm-follow-action-forward)
(define-key helm-map (kbd "<C-iso-lefttab>") 'helm-follow-action-backward)