В 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 есть следующее, чтобы менять окна с помощью клавиши со стрелкой 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)
круто ~~ у вас есть мой голос. Я новичок в emacs (но люблю его ... гений). Кстати, что означает "kbd" ??
Кстати, это похоже на команды крысиный яд для переход в другие "рамки": C-t Up, C-t Down и т. д.
Обратите внимание, что вызов (windmove-default-keybindings) связывает эти функции с SHIFT + вверх / вниз / влево / вправо, что, на мой взгляд, более удобно, чем ваши привязки C-x (которые конфликтуют с также полезными привязками по умолчанию для previous-buffer и next-buffer. Lkahtz: функция (kbd) позволяет вам укажите ключи в строковой нотации в более удобочитаемом синтаксисе, который также используется Emacs, когда вы используете C-h k или C-h c для описания привязки.
Я не одобряю использование клавиш со стрелками. Но я все равно проголосовал за услугу. : самодовольный:
Не могу найти windmove на MELPA, но Window-jump работает точно так же. melpa.milkbox.net/#/window-jump
@phils SHIFT + <keys> вмешивается в выбор сдвига, который включен по умолчанию в Emacs 23 (режим выбора-сдвига).
legends2k: Верно; хотя вы также можете передать аргумент windmove-default-keybindings, чтобы указать другой модификатор для использования вместе с клавишами со стрелками; так что эта функция все еще может быть удобна для людей, которые используют режим выбора-сдвига.
@phils Согласен, мета кажется хорошей альтернативой; как видно в Emacs Wiki.
Если вы используете windmove [я использую], я также настоятельно рекомендую использовать framemove.
Основано на идее @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)
Если вы много работаете с несколькими окнами 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.
Это именно то решение, которое мне было нужно. Все, что я хотел, - это чтобы команда переключения окон была однократным повторяющимся нажатием клавиши. Спасибо! Мне действительно пришлось изменить другое окно или фрейм на другое окно, чтобы оно работало, к вашему сведению. Я использую Emacs 24.2.1.
Я думаю, что это очень хорошие привязки (особенно когда у вас 2+ окна), спасибо. Как уже было сказано, нужно перейти на other-window, чтобы он заработал.
Лично я предпочитаю использовать window-number.el
Чтобы выбрать другое окно, используйте Ctrl-x, Ctrl-jп
Где п - номер окна, в модельной строке каждого окна показан его номер, как показано на снимке экрана.

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

(source: tapoueh.org)
Хорошо, но я бы посоветовал не привязывать что-то к C-x C-j, так как это привязка по умолчанию для dired-jump, если вы (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 на первом скриншоте. как я могу это получить?
@semente на моей странице, связанной с Emacs jasonm23.github.com/EmacsFodder/Emacs/2012/06/29/…
@Slomojo URL-адрес вашей страницы, связанной с emacs, попадает в число 404. Я знаю, что два года спустя, но есть ли у вас другие страницы, на которые можно посмотреть? Благодарю.
@petrux emacsfodder.github.io/blog/two-new-emacs24-themes Думаю, это, наверное, одна из двух тем. - Кстати. Для строки крутого режима попробуйте gist.github.com/jasonm23/8554119
Уже существует пакет, который позволяет переключать окна с помощью M-. проверьте этот сайт. Добавьте это в свой файл инициализации:
(require 'windmove)
(windmove-default-keybindings 'meta) ;; or use 'super to use windows key instead alt
Просто чтобы добавить к ответам @Nate, @aspirin и @ Troydm, я считаю, что это очень полезное дополнение, если вы решите привязать команды windmove к любой выбранной вами комбинации клавиш:
(setq windmove-wrap-around t)
В конфигурации по умолчанию вы получите сообщение об ошибке, когда попытаетесь перейти к несуществующему окну, которое через некоторое время станет раздражающим. Однако, когда установлен windmove-wrap-around, то при попытке отойти от нижней части фрейма, например, вместо этого будет выбрано самое верхнее окно в фрейме. Это может быть для вас более интуитивно понятным поведением.
Здесь есть несколько очень хороших и полных ответов, но, чтобы ответить на вопрос в минималистской манере:
(defun prev-window ()
(interactive)
(other-window -1))
(define-key global-map (kbd "C-x p") 'prev-window)
Не знаю, с каких пор, но теперь в emacs встроен previous-window.
@Arne Это не вызываемая функция в M-x, поэтому она должна служить другой цели.
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)
Я проголосовал за и использовал эту конфигурацию. Проблема в том, что 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-k - полезный ярлык. любые другие альтернативы?
(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"
Самый быстрый способ, который я нашел для перехода к предыдущему окну, - это использовать смешайте пару ключей вместе как "ключевой аккорд". Следующее позволяет вам использовать ваш левый мизинец + безымянный пальцы вместе, чтобы перейти к предыдущему окну:
(key-chord-define-global "qw" 'prev-window)
(key-chord-define-global "'y" 'other-window) ; bonus for my colemak, adjust otherwise
(key-chord-define-global ";'" 'other-window) ; probably normal
(Это возможно, потому что аккорды клавиш Emacs не зависят от порядка, а это означает, что qw совпадает с wq.)
И вы можете использовать
C-x z, чтобы повторить последнюю команду для быстрого переключения окон.