2010-11-09 6 views
3

Existe-t-il un moyen de basculer entre les tampons sans avoir à parcourir la liste des tampons ou écrire le nom du tampon que je souhaite utiliser? Plus précis, je me demande si emacs peut onglet entre les tampons un peu comme la façon dont il fonctionne dans notepad ++Onglet Emacs entre les tampons

+2

Cette question est également demandé (et des réponses différentes) sur le super-utilisateur: http://superuser.com/questions/208871/emacs-tab-between-buffers – jwernerny

+1

J'ai essayé beaucoup , et finalement arrêté sur un simple paquet iflip http: //www.emacswiki.org/emacs-ja/iflipb Au fil du temps, vous découvrirez qu'il n'y a guère de meilleure commutation que "C-x b" + mode ido – VitoshKa

Répondre

4

Emacs 22.1 et supérieur supports la previous-buffer (C-x <left arrow>) et next-buffer (C-x <right arrow>) commandes.

Ces deux commandes peuvent être ajoutées à Emacsen plus ancien en utilisant this script.

+0

y a-t-il aussi une commande pour basculer entre les plus récents? – starcorn

+0

Oui, voyez la section 'Changer entre deux tampons récemment utilisés 'dans le premier lien de ma réponse. –

3

Je ne l'ai jamais fini à l'aide <droite> Cx ou C-< Cx droite > beaucoup, parce que je trouve lourd à répéter si je veux le cycle passé plus d'un tampon, donc je l'ai juste écrit quelques fonctions pour vous permettre de continuer à changer si la dernière commande était également une commande next/previous-buffer-next/previous-buffer avec < C-droite > et < C-gauche >.

par exemple. C-x < C-gauche > < C-gauche > < C-gauche > < C-droite > < C-gauche > prendriez-vous revenir trois tampons, avant un, et en arrière à nouveau.

J'ai fait l'hypothèse que < C-gauche > & < C-droite > sont généralement liés à forward/backward-word, et vous appelle ceux qui sont explicitement comme serveur par défaut.

(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

(j'utilise Icicles pour la commutation de tampon, moi-même, mais ...)

Si vous voulez répéter la commande précédente un certain nombre de fois, il suffit d'utiliser ... zzzzzz Cx dans ce cas, par exemple, gauche Cx ... zzz Cx

Si c'est trop lourd, se lier (next|previous)-buffer à d'autres, les clés reproductibles, comme d'autres l'ont suggéré.

Mais les clés répétables sont très demandées. Si vous ne voulez pas en perdre, vous pouvez même mettre de telles commandes sur une touche de préfixe, de sorte que, par exemple, vous pouvez faire, par exemple, Cx gauche gauche gauche ... Voici un truc pour le faire (tiré de le Bookmark+ code):

 

    (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 
Questions connexes