Emacs, переключитесь на предыдущее окно

StackOverflow https://stackoverflow.com/questions/91071

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

Возможно, вы также захотите попробовать использовать windmove, который позволяет вам перейти к выбранному вами окну на основе геометрии.У меня есть следующее в моем файле .emacs для изменения Windows с помощью клавиши со стрелкой 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)

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

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

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

Просто скачайте окно-номер.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

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

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

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

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

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

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

(setq windmove-wrap-around t)

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

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)

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

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

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

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

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

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

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

(require 'windmove)
(windmove-default-keybindings 'meta) ;; or use 'super to use windows key instead alt
(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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top