Вкладка Emacs между буферами - PullRequest
3 голосов
/ 09 ноября 2010

Есть ли способ переключения между буферами без необходимости проходить через список буферов или записывать имя буфера, на который я хочу переключиться?Более конкретно, мне интересно, может ли emacs переключаться между буферами так же, как он работает в блокноте ++

Ответы [ 3 ]

4 голосов
/ 09 ноября 2010

Emacs 22.1 и выше поддерживает команды previous-buffer (C-x <left arrow>) и next-buffer (C-x <right arrow>).

Эти две команды можно добавить в более старый Emacsen, используя этот скрипт .

3 голосов
/ 12 ноября 2010

Я никогда не использовал Cx или Cx много, потому что я нахожу их громоздкими, чтобы повторяться, если я хочу перебрать более одного буфера, поэтому я только что написал пару функций, которые позволят вам продолжать переключаться на next/previous-buffer с и , если последняя команда была также next/previous-buffer командой.

например, Cx вернет вас назад на три буфера, вперед на один и обратно назад.

Я сделал предположение, что & обычно связаны с 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 голос
/ 21 августа 2011

(я использую Сосульки для переключения буфера, сам, но ...)

Если вы хотите повторить предыдущую команду любое количество раз, просто используйте Cx zzzzzz ... В этом случае, например, Cx влево Cx zzz ...

Если это слишком громоздко, свяжите (next|previous)-buffer с другими повторяемыми клавишами, как предлагали другие.

Но повторяющиеся клавиши пользуются большим спросом. Если вы не хотите тратить их впустую, вы можете даже поместить такие команды в префиксную клавишу, чтобы, например, вы могли сделать, например, Cx слева направо ... Вот хитрость, которую нужно сделать что (взято из закладки + код):


    (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 
...