Emacs, переключиться на предыдущее окно - PullRequest
90 голосов
/ 18 сентября 2008

В Emacs C-x o выводит меня в следующее окно.

Какой макрос клавиатуры переносит меня в предыдущее окно в Emacs?

Ответы [ 12 ]

100 голосов
/ 19 сентября 2008

Вы также можете попробовать использовать windmove, который позволяет вам перейти к окну по вашему выбору на основе геометрии. В моем файле .emacs есть следующее, чтобы изменить окна с помощью клавиши со стрелкой C-x.

(global-set-key (kbd "C-x <up>") 'windmove-up)
(global-set-key (kbd "C-x <down>") 'windmove-down)
(global-set-key (kbd "C-x <right>") 'windmove-right)
(global-set-key (kbd "C-x <left>") 'windmove-left)
84 голосов
/ 18 сентября 2008

Это было бы C-- C-x o

Другими словами, C-x o с аргументом -1. Вы можете указать количество перемещаемых окон, вставив числовой аргумент между C-u и командой, как в C-u 2 C-x o . ( C - - это сокращение для C-u - 1 )

29 голосов
/ 25 июня 2012

Лично я предпочитаю использовать window-number.el

Чтобы выбрать другое окно, используйте Ctrl - x , Ctrl - j n

Где n - номер окна, на моделине каждого окна отображается его номер, как показано на скриншоте.

Просто скачайте window-number.el , поместите его в путь загрузки emacs и используйте следующее в вашем .emacs

 (autoload 'window-number-mode "window-number"
   "A global minor mode that enables selection of windows according to
 numbers with the C-x C-j prefix.  Another mode,
 `window-number-meta-mode' enables the use of the M- prefix."
   t)

Существует еще один аналогичный режим, называемый switch-window.el, который дает большие числа в окнах ... (нажатие числа переключает окно и возвращает дисплей на место.)

http://tapoueh.org/images/emacs-switch-window.png

12 голосов
/ 16 февраля 2012

Если вы много работаете с несколькими окнами emacs (> 3) и хотите сохранить несколько нажатий клавиш, добавьте это в файл инициализации, и вам будет лучше:

(defun frame-bck()
  (interactive)
  (other-window-or-frame -1)
)
(define-key (current-global-map) (kbd "M-o") 'other-window-or-frame)
(define-key (current-global-map) (kbd "M-O") 'frame-bck)

Теперь просто быстро переключайтесь в окно с M-o

11 голосов
/ 01 августа 2013

Здесь есть несколько очень хороших и полных ответов, но на минималистский ответ на вопрос:

 (defun prev-window ()
   (interactive)
   (other-window -1))

 (define-key global-map (kbd "C-x p") 'prev-window)
4 голосов
/ 28 ноября 2013

M-n и M-p имеют для меня наибольшее значение, поскольку они аналогичны C-n ( следующая строка ) и C-p ( предыдущая строка ):

(define-key global-map (kbd "M-p") 'previous-multiframe-window)
(define-key global-map (kbd "M-n") 'other-window)

(вдохновленный этим и этим )

4 голосов
/ 01 октября 2012

Просто чтобы добавить к ответам @Nate, @aspirin и @ Troydm, я считаю это очень полезным дополнением, если вы решили связать команды windmove с любой комбинацией клавиш, которую вы выберете:

(setq windmove-wrap-around t)

При настройке по умолчанию вы получите ошибку, когда попытаетесь перейти к несуществующему окну, которое через некоторое время становится немного раздражающим. Тем не менее, когда задан режим с перемоткой по ветру, попытка сойти с нижней части кадра, например, выберет самое верхнее окно в кадре. Это может быть более интуитивное поведение для вас.

4 голосов
/ 21 мая 2011

Основано на идее от @Nate, но немного изменено для поддержки обратной цикличности между окнами

;; Windows Cycling
(defun windmove-up-cycle()
  (interactive)
  (condition-case nil (windmove-up)
    (error (condition-case nil (windmove-down)
         (error (condition-case nil (windmove-right) (error (condition-case nil (windmove-left) (error (windmove-up))))))))))

(defun windmove-down-cycle()
  (interactive)
  (condition-case nil (windmove-down)
    (error (condition-case nil (windmove-up)
         (error (condition-case nil (windmove-left) (error (condition-case nil (windmove-right) (error (windmove-down))))))))))

(defun windmove-right-cycle()
  (interactive)
  (condition-case nil (windmove-right)
    (error (condition-case nil (windmove-left)
         (error (condition-case nil (windmove-up) (error (condition-case nil (windmove-down) (error (windmove-right))))))))))

(defun windmove-left-cycle()
  (interactive)
  (condition-case nil (windmove-left)
    (error (condition-case nil (windmove-right)
         (error (condition-case nil (windmove-down) (error (condition-case nil (windmove-up) (error (windmove-left))))))))))

(global-set-key (kbd "C-x <up>") 'windmove-up-cycle)
(global-set-key (kbd "C-x <down>") 'windmove-down-cycle)
(global-set-key (kbd "C-x <right>") 'windmove-right-cycle)
(global-set-key (kbd "C-x <left>") 'windmove-left-cycle)
2 голосов
/ 01 февраля 2015
(global-unset-key (kbd "M-j"))
(global-unset-key (kbd "M-k"))
(global-set-key (kbd "M-j") (lambda () (interactive) (other-window 1)))
(global-set-key (kbd "M-k") (lambda () (interactive) (other-window -1)))

alt j и alt k будут циклически перебирать все видимые буферы. Точнее, вперед и назад.

2 голосов
/ 10 июня 2014

Что касается ответа Нейта, я заменил arrow keys, чтобы использовать традиционные p для перехода up, n для перехода down, f для перехода right и b для собирается left. Я также заменил Ctrl на Super, так как C-p, C-n, C-f and C-b являются клавишами перемещения по умолчанию. Эта комбинация с M позволяет вам перемещаться по символам и строкам вместо того, чтобы проходить по одному после каждого нажатия клавиши. Таким образом, ключ Super оказался лучшим выбором, чтобы сохранить его легким связыванием ключа. Кроме того, теперь вам больше не нужно убирать руку с домашнего ряда!

(global-set-key (kbd "s-p") `windmove-up)
(global-set-key (kbd "s-n") `windmove-down)
(global-set-key (kbd "s-f") `windmove-right)
(global-set-key (kbd "s-b") `windmove-left)

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...