Emacs, перейти в предыдущее окно

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
95
0
32 459
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

Ответ принят как подходящий

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

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

И вы можете использовать C-x z, чтобы повторить последнюю команду для быстрого переключения окон.

Ivan Huang 26.11.2019 08:33

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

lkahtz 11.02.2011 20:22

Кстати, это похоже на команды крысиный яд для переход в другие "рамки": C-t Up, C-t Down и т. д.

imz -- Ivan Zakharyaschev 22.05.2011 12:49

Обратите внимание, что вызов (windmove-default-keybindings) связывает эти функции с SHIFT + вверх / вниз / влево / вправо, что, на мой взгляд, более удобно, чем ваши привязки C-x (которые конфликтуют с также полезными привязками по умолчанию для previous-buffer и next-buffer. Lkahtz: функция (kbd) позволяет вам укажите ключи в строковой нотации в более удобочитаемом синтаксисе, который также используется Emacs, когда вы используете C-h k или C-h c для описания привязки.

phils 16.02.2012 10:51

Я не одобряю использование клавиш со стрелками. Но я все равно проголосовал за услугу. : самодовольный:

Bjorn 11.08.2013 21:06

Не могу найти windmove на MELPA, но Window-jump работает точно так же. melpa.milkbox.net/#/window-jump

apennebaker 24.01.2014 00:33

@phils SHIFT + <keys> вмешивается в выбор сдвига, который включен по умолчанию в Emacs 23 (режим выбора-сдвига).

legends2k 22.07.2014 16:23

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

phils 22.07.2014 18:05

@phils Согласен, мета кажется хорошей альтернативой; как видно в Emacs Wiki.

legends2k 02.06.2017 21:16

Если вы используете windmove [я использую], я также настоятельно рекомендую использовать framemove.

Bret Weinraub 19.12.2017 15:17

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

Geoff 09.06.2013 06:16

Я думаю, что это очень хорошие привязки (особенно когда у вас 2+ окна), спасибо. Как уже было сказано, нужно перейти на other-window, чтобы он заработал.

dolzenko 08.09.2014 17:32

Лично я предпочитаю использовать 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, если вы хотите отменить это.)

phils 25.06.2012 10:28

После публикации я решил попробовать switch-window.el, вместо этого он использует C-x o, а когда активны только два окна, он просто выбирает другое окно. Я думаю, что разумнее всего перепрограммировать C-x o для выполнения трюка window-number, вы совершенно правы насчет dired-jump. Лично я меньше переключаю окна и сам использую C-x b, но наличие улучшенного C-x o весьма приятно.

ocodo 26.06.2012 06:45

вау потрясающая тема Emacs на первом скриншоте. как я могу это получить?

semente 17.07.2012 02:30

@semente на моей странице, связанной с Emacs jasonm23.github.com/EmacsFodder/Emacs/2012/06/29/…

ocodo 17.07.2012 10:26

@Slomojo URL-адрес вашей страницы, связанной с emacs, попадает в число 404. Я знаю, что два года спустя, но есть ли у вас другие страницы, на которые можно посмотреть? Благодарю.

petrux 25.11.2014 19:15
jasonm23.github.io or emacsfodder.github.io should have what you are looking for. Please note the mode line formatter shown (main-line) isn't maintained, (no power-line version is, that I know of.)
ocodo 26.11.2014 02:13

@petrux emacsfodder.github.io/blog/two-new-emacs24-themes Думаю, это, наверное, одна из двух тем. - Кстати. Для строки крутого режима попробуйте gist.github.com/jasonm23/8554119

ocodo 26.11.2014 02:18

Уже существует пакет, который позволяет переключать окна с помощью 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 24.07.2017 22:43

@Arne Это не вызываемая функция в M-x, поэтому она должна служить другой цели.

Ivan Huang 26.11.2019 08:30

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

mihai 16.11.2015 14:55

Для чего они используются в этих средах?

tshepang 16.11.2015 17:39

Это лучшее, что я видел на данный момент, он не идет вразрез с другими вещами и работает как шарм! Спасибо!

aurelien 07.11.2017 09:08

Что касается ответа Нейта, я заменил 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 - полезный ярлык. любые другие альтернативы?

A_P 03.05.2016 20:00

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

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