Emacs перемещается по разделенным окнам в определенном направлении?
В терминале Emacs (без мыши) я использую разделенные окна для одновременного работы с несколькими буферами. Я нахожу переход между разделенными окнами гораздо более болезненными, чем то, как я это делаю в Vim. Читая документацию, похоже, что я делаю это правильно (C-x o), но это просто крутится вокруг окон по часовой стрелке. Если я перейду в соседнее окно, чтобы сделать быстрое редактирование, мне нужно несколько раз нажать C-x o, прежде чем я вернусь туда, где я был. Иногда я случайно нажимаю его слишком много раз в спешке и должен снова проехать обратно через окна.
Далеко от установки еще-другого-внешнего-пакета, есть ли какой-либо способ, который я могу просто перемещать непосредственно в окно (например, числом) или, по крайней мере, обойти окна в противоположном направлении?
В Vim C-w C-w походит на C-x o в Emacs, но также C-w ARROW перемещается в определенном направлении... что-то вроде этого? :)
Ответы
Ответ 1
Добавьте это в файл инициализации:
(windmove-default-keybindings)
Затем вы можете использовать SHIFT+arrow для перехода к следующему соседнему окну в указанном направлении.
Вы можете указать другой модификатор, если хотите, передав аргумент (по умолчанию - 'shift
).
Или просто привяжите все, что вам нравится к этим функциям:
-
windmove-up
-
windmove-down
-
windmove-left
-
windmove-right
Вы также можете добавить FrameMove в микс, чтобы сделать эту работу прозрачно на нескольких кадрах.
Для нумерованной навигации окна есть switch-window.el.
Ответ 2
Вы можете указать префиксный аргумент C-x o, как C-u -1 C-x o. Таким образом, вы можете перейти на любое количество окон вперед или назад. Лично я думаю, что проще создать специальный ключ для перемещения в одно окно. У меня это в моих.emacs:
(defun other-window-backward ()
"Goto previous window"
(interactive)
(other-window -1))
(global-set-key (kbd "\C-x p") 'other-window-backward)
Ответ 3
Я использую следующее для перехода к следующему (так же, как C-x o), предыдущему, первому и последнему окну:
(defun my-previous-window ()
"Previous window"
(interactive)
(other-window -1))
(global-set-key "\C-xp" 'my-previous-window)
(global-set-key "\C-xn" 'other-window)
(defun my-select-first-window ()
(interactive)
(select-window (frame-first-window)))
(defun my-select-last-window ()
(interactive)
(select-window (previous-window (frame-first-window))))
(global-set-key "\C-x<" 'my-select-first-window)
(global-set-key "\C-x>" 'my-select-last-window)
Ответ 4
Используйте прыжок в окно, например:
;; C-x <direction> to switch windows
(use-package window-jump
:bind (("C-x <up>" . window-jump-up)
("C-x <down>" . window-jump-down)
("C-x <left>" . window-jump-left)
("C-x <right>" . window-jump-right)))
Для получения справки по использованию пакета см. Https://github.com/jwiegley/use-package/blob/master/README.md.
Ответ 5
Ради завершения, есть нумерация окон и туз-окно тоже
Ответ 6
Добавьте это в файл инициализации (например, ~/.emacs
):
(windmove-default-keybindings)
Затем сделайте SHIFT+arrow, чтобы перейти в окно в этом направлении.
Ответ 7
Я написал модуль elisp, чтобы вернуться на windmove, чтобы сделать его более полезным: http://samograd.ca/stumpwm.el. Вы можете привязать stumpwm-move-window- [left/right/up/down] к тем клавишам, которые вы хотите, и окна будут двигаться в правильном направлении, даже в другой другой кадр (проверено на 2 кадра). Также есть окно stumpwm-interactive-resize для удобного интерактивного изменения размера окна с использованием Cn/Cp/Cf/Cb с возвратом до конца.