В Emacs C-x oпереводит меня в следующее окно.
Какой макрос клавиатуры переводит меня в предыдущее окно в Emacs?
В Emacs C-x oпереводит меня в следующее окно.
Какой макрос клавиатуры переводит меня в предыдущее окно в Emacs?
Ответы:
Вы также можете попробовать использовать windmove, который позволяет перейти к выбранному вами окну на основе геометрии. В моем файле .emacs есть следующее, чтобы менять окна с помощью клавиши со стрелкой Cx.
(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)
(windmove-default-keybindings)
привязывает эти функции к SHIFT + вверх / вниз / влево / вправо, что, на мой взгляд, более удобно, чем ваши C-x
привязки (которые конфликтуют с также полезными привязками по умолчанию для previous-buffer
и next-buffer
. Lkahtz: (kbd)
функция позволяет вам указывать ключи в строковой нотации в более удобочитаемом синтаксисе, который также используется Emacs, когда вы используете C-h k
или C-h c
для описания привязки.
windmove-default-keybindings
указать другой модификатор, который будет использоваться вместе с клавишами со стрелками; так что эта функция все еще может быть удобна для людей, которые используют режим выбора-сдвига.
Лично я предпочитаю использовать 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 )
C-x C-j
, так как это привязка по умолчанию для dired-jump
if you (require 'dired-x)
. (Посмотрим M-x customize-group RET dired-keys RET
, хотите ли вы это изменить.)
switch-window.el
попробовать, C-x o
вместо этого он использует , а когда активны только два окна, он просто выбирает другое окно. Я думаю, что разумнее всего C-x o
было бы повторить window-number
трюк, вы совершенно правы dired-jump
. Лично я меньше переключаюсь между окнами и C-x b
сам пользуюсь , но наличие улучшенного C-x o
довольно приятно.
Если вы много работаете с несколькими окнами 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)
Теперь просто быстро переключайтесь между окнами с помощью Mo
other-window
он работал.
Здесь есть несколько очень хороших и полных ответов, но, чтобы ответить на вопрос в минималистской манере:
(defun prev-window ()
(interactive)
(other-window -1))
(define-key global-map (kbd "C-x p") 'prev-window)
previous-window
встроен.
M-x
поэтому она должна служить другой цели.
Основано на идее @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
уже используются в терминалах (gdb, python, ielm и т. Д.), Поэтому вам придется вернуться к другому методу для выхода из буфера терминала.
Ссылаясь на ответ Ната, я заменил 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)
Надеюсь, поможет!
(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)))
altjи altkбудет циклически перебирать ваши видимые буферы. Точнее, вперед и назад.
Уже существует пакет, который позволяет переключать окна с помощью 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"
C-x z
для повторения последней команды для быстрого переключения окон.