Як швидко перемикатися між вікнами?
У мене часто відкрито кілька вікон і мені потрібно перемикатися між ними. Прямо зараз я користуюся C-x o
тим, що хочу. Чи є для цього більш ефективний робочий процес?
Як швидко перемикатися між вікнами?
У мене часто відкрито кілька вікон і мені потрібно перемикатися між ними. Прямо зараз я користуюся C-x o
тим, що хочу. Чи є для цього більш ефективний робочий процес?
Відповіді:
Я, очевидно, віддаю перевагу ас-вікну для цього. Ви можете перемикатися між видимими вікнами та рамами. Це в MELPA, його можна швидко встановити. Залишилося лише зв'язати це:
(global-set-key (kbd "C-x o") 'ace-window)
Або, можливо, скористайтеся коротшим акордом, оскільки перемикання вікон є звичайним завданням:
(global-set-key (kbd "M-p") 'ace-window)
ace-window
Це заміна, що випадає other-window
. На відміну від останнього, вам ніколи не потрібно дзвонити ace-window
два чи більше разів, щоб вибрати вікно: ви вибираєте вікно, яке ви хочете в одному дзвінку (можливо, через кілька кадрів).
Окрім перемикання вікон, ace-window
можна зробити більше (видалити чи поміняти вікна тощо), див. README .
ace-window
а потім побачив, switch-window
що, здається, робить приблизно те ж саме, за винятком того, що літери є більш вираженими. здається смішним, у нас обидва пакети.
switch-window
поки я не подав заяву ace-window
на MELPA.
ace-window
, я маю більше налаштування, ніж інші пакунки, я думаю. Однак, можливо, в майбутньому це може допомогти - це ключове прив'язування до функції, яка буде аналогічно дії розумної заміни, але з'їдає це вікно, в результаті чого вікно буде більш великим і вибране вікно меншого розміру (з'їдене вгору вікно). У цьому випадку співвідношення слід визначати як половина, одна четверта або третина.
Один із способів - це використання windmove
. Завдяки своїм клавіатурним вкладкам за замовчуванням він дозволяє переходити до вікна поруч із активно діючим.
Він вбудований в Emacs, тому не потрібно нічого встановлювати; просто активуйте його за допомогою наступних мінімальних налаштувань у вашому файлі init:
(windmove-default-keybindings)
Ви можете переключитися на сусідні вікна з допомогою наступних клавіш (де стрілка використовується інтуїтивно визначає напрямок , в якому ви рухаєтеся): S-<left>
, S-<right>
, S-<up>
, S-<down>
.
Якщо ви хочете використовувати інший модифікатор замість shift, ви можете надати його як аргумент windmove-default-keybindings
. Наприклад:
(windmove-default-keybindings 'meta)
або
(windmove-default-keybindings 'control)
Більше інформації на Emacs Wiki .
(windmove-default-keybindings 'meta)
як це запропоновано на EmacsWiki.
Shift-arrow
) , але коли у вас великий монітор з великою кількістю розщеплень, такий рух швидко стає непростим. Було б цікавіше якось перерахувати вікна / розбивки. Мовляв ace-window
, але з меншими натисканнями клавіш і очевидним алгоритмом, щоб відразу з’ясувати потрібне число.
Ви можете прив’язати other-window
до більш легкої для введення послідовності клавіш.
Наприклад, я C-.
зобов'язаний other-window
, і C-,
зобов'язаний перейти до попереднього вікна.
(global-set-key (kbd "C-.") #'other-window)
(global-set-key (kbd "C-,") #'prev-window)
(defun prev-window ()
(interactive)
(other-window -1))
Це особливо корисно для переміщення декількох вікон; як тільки ви утримуєте клавішу Control, вам потрібно лише натиснути одну кнопку, щоб перейти до наступного вікна. Це набагато простіше, ніж три натискання клавіш на ходу.
C-x o
для other-window
- один з небагатьох солідних претендентів на титул "найгіршого ярлика швидкого доступу до emacs". Моє рішення (подібне до zck) полягала в тому, щоб перезавантажити на (простішу) простішу other window
послідовність клавіш - я його зв'язав C-;
(і мій Caps-Lock
обміняється Ctrl
таким чином, що все, що потрібно, - це швидке натискання на pinkey). До речі, я повністю залежний від певних особливостей helm
і icicles
(тобто я не "антипакет" чи що-небудь); Я просто думаю, що просте рішення тут найкраще працює.
M-o
для other-window
. Деякі режими вже мають M-o
обов'язковий характер , в зокрема diff-mode
, ggtag-mode
і ibuffer-mode
. Ви повинні від’єднати її вручну в кожній карті режимів. unbind-key
надається bind-key.el
дуже корисно.
M-o
і M-O
зобов’язаний, ace-window
коли мені потрібна додаткова потужність.
window-numbering.el!
Я призначаю гарячу клавішу ", 1", ", 2", ", 3" для переключення конкретного вікна (будь ласка, зверніть увагу, я використовую злий режим)
крім того, я відображаю номер вікна в рядку режиму в кольорі PINK, підкресленому.
Це візуальний натяк, який ніколи не можна ігнорувати,
Це найшвидший спосіб переключення вікна.
перевірити https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-evil.el та https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-modeline .el для моєї настройки.
Сильвейн Беннер прийняв мою ідею у космосамах, але клавіатурні зв'язки різні . Тож якщо ви використовуєте spacemacs, ви отримаєте швидке рішення з коробки.
window-number
з M-<num>
для швидкого перемикання ж / б вікон. Подібна концепція до цієї
Не використовуючи додаткових додатків, ви можете продовжувати використовувати C-x o
додатковий префікс для пропуску через багато вікон. Напр .: C-u 1 C-x o
перейде до наступного вікна в порядку (тобто, що ви отримаєте з звичайним C-x o
), C-u 2 C-x o
перейде два вікна, C-u 3 C-x o
перейде три вікна і так далі.
Уривок з other-window
docstring (функція викликається C-x o
:
COUNT визначає кількість вікон, які потрібно пропустити, починаючи з вибраного вікна, перш ніж зробити вибір. Якщо значення COUNT позитивне, пропустіть вікна COUNT вперед. Якщо значення COUNT від’ємне, пропустіть –COUNT вікна назад. COUNT нуль означає, що не пропускайте жодне вікно, тому виберіть вибране вікно. В інтерактивному дзвінку COUNT - аргумент числового префіксу. Повернути нуль.
Деякі люди можуть запам’ятати редактор Коротко (досить смішно, створене компанією під назвою Underware).
Це був акуратний спосіб перемикання між видимими вікнами. M-стрілка перемістить курсор у вікно прямо відповідно до напрямку клавіші зі стрілкою.
Таким чином, я відобразив winmove-left
, winmove-right
, winmove-up
і winmove-down
функцію M-left
, M-right
, M-up
і M-down
такі клавіші в моєму файлі .emacs -
(global-set-key [M-left] 'windmove-left) ; move to left window
(global-set-key [M-right] 'windmove-right) ; move to right window
(global-set-key [M-up] 'windmove-up) ; move to upper window
(global-set-key [M-down] 'windmove-down) ; move to lower window
Тепер я можу легко переміщатися між вікнами, незалежно від того, наскільки зафіксована у мене конфігурація ... І це може бути дуже захаращено розмірами дисплеїв сьогодні ...
(windmove-default-keybindings 'meta)
!
Якщо ви використовуєте Icicles, тоді C-x o
ви можете вибрати вікна за назвою (або на велосипеді).
Без аргументу префікса - C-x o
це те саме, що зазвичай, за other-window
винятком випадків, коли кадр має лише одне вікно, і в цьому випадку він є other-frame
.
З префіксом arg C-x o
- це багатокомандна команда, яка дозволяє переходити між вікнами чи кадрами по імені (або на велосипеді). Для навігації серед вікон використовується багатокомандна команда icicle-select-window
; навігація між використанням кадрів icicle-select-frame
.
Яка навігація використовується, залежить від префікса arg:
Нульовий префікс arg (наприклад C-0
): Якщо у вибраному кадрі є кілька вікон, то це
icicle-select-window
, з вікнами в одному кадрі з кандидатами. Інакше (одновіконна рама), це так icicle-select-frame
.
C-u
: Якщо вибраний кадр має декілька вікон, то це так
icicle-select-window
, що вікна з усіх видимих кадрів є кандидатами. Інакше це icicle-select-frame
.
C-u C-u
: icicle-select-window
, з вікнами з усіх кадрів як кандидатів (у тому числі з ініційованими або прихованими кадрами).
Як завжди в « Icicles» , ви можете комбінувати (a) завершення , набравши текст, щоб звузити набір відповідних кандидатів (у цьому випадку імена вікон або кадрів), з (b) пересуванням (серед кандидатів, що відповідають).
Подумайте про використання брелока для швидкого переходу між вікнами. Я вважаю, що це набагато швидше, ніж тягнутися до клавіші модифікатора (і менше напружуватися на моїх руках).
Мій вибір пакета, який потрібно використовувати ace-window
, який дозволяє переміщатися по декількох вікнах простіше, ніж просто other-window
.
(require 'key-chord)
(key-chord-define-global "xo" 'ace-window)
(key-chord-mode +1)
Очевидно, що використовувати це вам потрібно, key-chord
і ace-window
обидва доступні в melpa.
ace-window
виконує роботу так, як у відповіді @ Або-Або. Мене вражає, що в цьому контексті використання конкретного прив'язки клавіш матиме більше сенс як коментар, а не відповідь. Всього два мої центи.
key-chord
можна прив’язати дуже доступні комбінації клавіш. Приклад зв'язування xo
швидше, ніж C-x o
(глибина один проти двох). Цю відповідь можна переформулювати, щоб підкреслити, що відповідь є ортогональною для інших відповідей щодо вибору функції (і ace-window
є лише одним із багатьох варіантів, які можуть бути пов'язані описаним способом). Зберігайте цю відповідь як виразну!
Тут є кілька хороших відповідей, я також є фанатом WinMove, але прив'язую його до C- тому що в режимі org використовується M- для маніпулювання заголовками
(define-key global-map (kbd "C-<up>") 'windmove-up)
(define-key global-map (kbd "C-<down>") 'windmove-down)
(define-key global-map (kbd "C-<left>") 'windmove-left)
(define-key global-map (kbd "C-<right>") 'windmove-right)
Там, де це справді добре, якщо поєднувати його з гідрою . Наслідуючи приклади на їхній вікі, я створив власного монстра:
(defhydra hydra-windows ()
"C-arrow = switch, S-arrow = size, M-arrow = move"
("C-<left>" windmove-left nil)
("C-<right>" windmove-right nil)
("C-<up>" windmove-up nil)
("C-<down>" windmove-down nil)
("S-<left>" hydra-move-splitter-left nil)
("S-<right>" hydra-move-splitter-right nil)
("S-<up>" hydra-move-splitter-up nil)
("S-<down>" hydra-move-splitter-down nil)
("M-<left>" buf-move-left nil)
("M-<right>" buf-move-right nil)
("M-<up>" buf-move-up nil)
("M-<down>" buf-move-down nil)
("p" previous-buffer "prev-buf")
("n" next-buffer "next-buf")
("1" delete-other-windows "1")
("d" delete-window "del")
("k" kill-buffer "kill")
("s" save-buffer "save")
("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo")
("r" winner-redo "redo")
("b" helm-mini "helm-mini" :exit t)
("f" helm-find-files "helm-find" :exit t)
("|" (lambda () (interactive) (split-window-right) (windmove-right)))
("_" (lambda () (interactive) (split-window-below) (windmove-down)))
("q" nil "cancel")
)
(global-set-key (kbd "M-#") 'hydra-windows/body)
Це дозволяє мені змінювати вікна, змінювати їх розмір, переміщувати буфери з вікна у вікно, циклічні буфери, вбивати буфери та навіть скасовувати конфігурації вікон через режим переможця, а також інтегрує керма. Щоб вийти з гідри, просто натисніть стрілку або якусь іншу клавішу, яка не є в гідрі. Ви можете знайти функції "hydra-move" на прикладах гідри. Найкраще в справі про гідру - мені не потрібно пам’ятати всі ці клавіші та її "поміркованість", тож коли ви перебуваєте в гідрі, все доступне як один ключ натиснути.
(windmove-default-keybindings 'control)
.
Якщо ви використовуєте evil-mode
, ви можете просто використовувати числовий префікс з C-w C-w
( evil-window-next
), щоб вибрати потрібне вікно. Отже: 1 C-w C-w
вибирає перше вікно в циклічному порядку, 3 C-w C-w
вибирає третє вікно в циклічному порядку тощо.
Ace Jump дозволяє орієнтуватися на вказівник на всі слова на екрані, незалежно від того, у якому вікні чи кадрі вони знаходяться, тому він не так відрізняється від використання вікна Ace або Switch Window.
Перевагою може бути те, що під час перестрибування вікон ви також можете з точністю розмістити свій покажчик.
Я все ще вважаю це трохи громіздким або відволікаючим, і вважаю, що я використовую windmove
більше, тому що це дуже просто, але все ж використовую Ace Jump, коли я читав в іншому вікні чи рамці і хочу переїхати на місце там.
Як завжди, існує сто різних способів досягти цього. Моїм бажаним способом є використання NumberedWindows . Потім я встановлюю наступне сполучення клавіш за допомогою клавіш Super та клавіш 1-9.
(global-set-key (kbd "s-1") (lambda() (interactive) (window-number-select 1)))
Я розбираюся трохи детальніше про цю точну тему з останнім моїм повідомленням, яке ви можете прочитати на Coder Afterday .
Ви також можете вирішити використовувати перемикач-вікно як візуальну замінуC-x o
switch-window
над усіма іншими?