Как поменять местами буферы в 2 windows emacs
Я использую emacs я нахожу, что иногда у меня есть 2 файла, разделенные на 2 окна.
например:
Я открываю 1 файл с помощью C-x C-f file1.c RET
и я разделил рамку на два окна:C-x 3
затем я открываю другой файл C-x C-f file2.c RET
Итак, у меня есть 2 файла:
8 ответов:
Я использую buffer-move для этого. Теперь, если вы работаете над буфером с левой стороны, вызов "buf-move-right" заменит его на тот, что справа. Я думаю, это то, что вы хотите.
The транспонировать-рамка библиотека предоставляет довольно полный набор функций для переворачивания или поворота расположения окон в рамках.
M-x
flop-frameRET делает то, что этот конкретный вопрос нуждается.следующие диаграммы взяты из комментария в библиотеке (и ее странице EmacsWiki):
‘transpose-frame’ … Swap x-direction and y-direction +------------+------------+ +----------------+--------+ | | B | | A | | | A +------------+ | | | | | C | => +--------+-------+ D | +------------+------------+ | B | C | | | D | | | | | +-------------------------+ +--------+-------+--------+ ‘flip-frame’ … Flip vertically +------------+------------+ +------------+------------+ | | B | | D | | A +------------+ +------------+------------+ | | C | => | | C | +------------+------------+ | A +------------+ | D | | | B | +-------------------------+ +------------+------------+ ‘flop-frame’ … Flop horizontally +------------+------------+ +------------+------------+ | | B | | B | | | A +------------+ +------------+ A | | | C | => | C | | +------------+------------+ +------------+------------+ | D | | D | +-------------------------+ +-------------------------+ ‘rotate-frame’ … Rotate 180 degrees +------------+------------+ +-------------------------+ | | B | | D | | A +------------+ +------------+------------+ | | C | => | C | | +------------+------------+ +------------+ A | | D | | B | | +-------------------------+ +------------+------------+ ‘rotate-frame-clockwise’ … Rotate 90 degrees clockwise +------------+------------+ +-------+-----------------+ | | B | | | A | | A +------------+ | | | | | C | => | D +--------+--------+ +------------+------------+ | | B | C | | D | | | | | +-------------------------+ +-------+--------+--------+ ‘rotate-frame-anti-clockwise’ … Rotate 90 degrees anti-clockwise +------------+------------+ +--------+--------+-------+ | | B | | B | C | | | A +------------+ | | | | | | C | => +--------+--------+ D | +------------+------------+ | A | | | D | | | | +-------------------------+ +-----------------+-------+
Я не знаю о какой-либо встроенной функции, делающей это.
однако, это не кажется слишком сложным, чтобы на скорую руку некоторые elisp для этого. Однако дьявол кроется в деталях.
(defun swap-buffers-in-windows () "Put the buffer from the selected window in next window, and vice versa" (interactive) (let* ((this (selected-window)) (other (next-window)) (this-buffer (window-buffer this)) (other-buffer (window-buffer other))) (set-window-buffer other this-buffer) (set-window-buffer this other-buffer) ) )Примечательно, что это может не делать то, что вы хотите в отношении того, где каретка заканчивается. Однако сначала вам нужно сказать, что вы хотите: p
в файле новостей Emacs 26.1 есть следующая запись:
+++ *** New command 'window-swap-states' swaps the states of two live windows.который, кажется, предлагает аналогичную функциональность
crux-transpose-windowsно может также сделать некоторые транспозиции высоты / ширины?
Если у вас есть прелюдия, вы можете использовать ace-window с
S-w. Оттуда вы можете сделать много вещей, перечисленных в их docs.вы также можете начать с вызова ace-window, а затем решить переключить действие для удаления или замены и т. д. По умолчанию привязки являются:
X - окно удалить
M-swap (move) window
C-разделите окно справедливо, или вертикально или горизонтально
в - Сплит окно вертикально
B-разделить окно по горизонтали
n-выберите предыдущее окно
...
Так бы и было
S-w m
следующий фрагмент кода может сделать переключатель буфера.
(defun ab/switch-buffer-each-other (arg) "switch current buffer with other window buffer right-2-left and up-2-down" (interactive "p") (cond ((windmove-find-other-window 'right) (buf-move-right)) ((windmove-find-other-window 'left) (buf-move-left)) ((windmove-find-other-window 'up) (buf-move-up)) ((windmove-find-other-window 'down) (buf-move-down))) (message "switch buffer done"))
Я бы умудрился открыть файл #2 в нужном месте, т. е. после того, как вы нажмете c-x 3, переместите курсор с помощью c-x o перед переходом ко второму файлу.
Comments