2010-11-09 104 views
3

有沒有辦法在緩衝區之間切換,而不必通過 緩衝區列表或寫入我想要切換到的緩衝區的名稱?更具體的我不知道Emacs可以緩衝區之間標籤就像它是如何在記事本工作++緩衝區之間的Emacs選項卡

+2

這個問題也問(並回答不同)以上的超級用戶:http://superuser.com/questions/208871/emacs-tab-between-buffers – jwernerny 2010-11-09 13:50:19

+1

我試過很多,並最終停在一個簡單的iflip包http://www.emacswiki上。org/emacs-ja/iflipb隨着時間的推移,你會發現幾乎沒有比「C-x b」更好的切換+ ido-mode – VitoshKa 2010-11-09 21:18:38

回答

4

Emacs的22.1及更高supportsprevious-bufferC-x <left arrow>)和next-bufferC-x <right arrow>)命令。

可以使用this script將這兩個命令添加到較老的Emacsen。

+0

是否還有一個命令可以在最近的命令之間切換? – starcorn 2010-11-09 11:41:39

+0

是的,請參閱我的答案中第一個鏈接中的「在兩個最近使用的緩衝區之間切換」部分。 – 2010-11-09 11:43:00

3

我從來沒有最終使用CX <權>CX < C-右>了,因爲我覺得他們繁瑣重複,如果我想過去的週期超過一個緩衝區,所以我剛剛寫了一對夫婦的功能,讓你繼續切換到next/previous-buffer< C-右>< C-左>如果最後的命令也是一個next/previous-buffer命令。

例如C-X < C-左> < C-左> < C-左> < C-右> < C-左>將帶您回到三個緩存器,向前,向後一次。

我所做的假設,即< C-左> & < C-右>通常勢必forward/backward-word,和我呼籲那些明確作爲後備。

(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) 
1

(我用Icicles緩衝區交換,我自己,但是......)

如果你想重複以前的命令任意次數,只要使用CX ZZZZZZ ......在這種情況下,例如,CX離開CX ZZZ ......

如果真是太麻煩了,綁定(next|previous)-buffer以外,重複鍵,如其他人所說。

但可重複的鑰匙需求量很大。如果你不想浪費任何東西,你甚至可以把這些命令放在一個前綴鍵上,這樣,例如,你可以這樣做,例如,Cx左上角的左邊 ......這是一個訣竅,在Bookmark+代碼):

 

    (defun my-repeat-command (command) 
     "Repeat COMMAND." 
     (let ((repeat-message-function 'ignore)) 
     (setq last-repeatable-command command) 
     (repeat nil))) 

    (defun my-next-whatever-repeat (arg) ; `C-x right' 
     "Jump to the Nth-next whatever. 
    N defaults to 1, meaning the next whatever. 
    Plain `C-u' means start over at the first whatever (and no repeat)." 
     (interactive "P") 
     (require 'repeat) 
     (my-repeat-command 'next-whatever)) 

    (define-key ctl-x-map [right] 'my-next-whatever-repeat