Emacs, переход в предыдущее окно

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

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

Ответ 1

Это будет C-- C-x o

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

Ответ 2

Вы также можете попробовать использовать 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)

Ответ 3

Лично я предпочитаю использовать 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, который дает большие цифры в окнах... (нажатие на номер переключает окно и возвращает дисплей на место.)


(источник: tapoueh.org)

Ответ 4

Если вы много работаете с несколькими окнами 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

Ответ 5

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

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

 (define-key global-map (kbd "C-x p") 'prev-window)

Ответ 6

Основа на идее от @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)

Ответ 7

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

(setq windmove-wrap-around t)

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

Ответ 8

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)

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

Ответ 9

В отношении ответа Nate я заменил 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)

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

Ответ 10

(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 будут циклически перемещаться по вашим буферам видимости. Наоборот и назад, если быть точным.

Ответ 11

Уже есть пакет, который позволяет вам переключать окна с помощью M-. проверить этот сайт. Добавьте это в файл инициализации:

(require 'windmove)
(windmove-default-keybindings 'meta) ;; or use 'super to use windows key instead alt

Ответ 12

(global-set-key (kbd "C-x a") 'ace-swap-window)  
(global-set-key (kbd "C-x q") 'ace-select-window)

download ace-window from the melpa repo if you don't know how to do that
put this in your .emacs file if you don't have one create it 

(package-initialize)                                                                                                                                                                     

(require 'package)                                                                                                                                                                       
(add-to-list 'package-archives '("melpa" , "http://melpa.org/packages/"))                                                                                                                

(package-initialize) 

then "m-x list-packages"