Jak szybko przełączać się między oknami?
Często mam otwarte wiele okien i muszę się między nimi przełączać. W tej chwili korzystam C-x o
z tego, którego chcę. Czy jest dostępny bardziej wydajny przepływ pracy?
Jak szybko przełączać się między oknami?
Często mam otwarte wiele okien i muszę się między nimi przełączać. W tej chwili korzystam C-x o
z tego, którego chcę. Czy jest dostępny bardziej wydajny przepływ pracy?
Odpowiedzi:
Oczywiście wolę do tego okno asa . Możesz przełączać się między widocznymi oknami i ramkami. Jest w MELPA, możesz go szybko zainstalować. Jedyne, co pozostało do zrobienia, to związać to:
(global-set-key (kbd "C-x o") 'ace-window)
A może użyj krótszego akordu klawiszowego, ponieważ przełączanie okien jest częstym zadaniem:
(global-set-key (kbd "M-p") 'ace-window)
ace-window
Jest to zamiennik drop-in dla other-window
. W przeciwieństwie do tego drugiego, nigdy nie musisz dzwonić ace-window
dwa lub więcej razy, aby wybrać okno: wybierasz okno, które chcesz w jednym połączeniu (być może w wielu ramkach).
Oprócz przełączania okien ace-window
można zrobić więcej (usuwać lub zamieniać okna itp.), Zobacz CZYTAJ .
ace-window
a potem zobaczyłem, switch-window
co wydaje się robić mniej więcej to samo, z wyjątkiem tego, że litery są bardziej wyraźne. wydaje się zabawne, mamy oba pakiety.
switch-window
dopóki nie ace-window
zgłosiłem się do MELPA.
ace-window
, ma chyba więcej możliwości dostosowywania niż inne pakiety. W przyszłości może być pomocna kluczowa funkcja powiązana z funkcją, która działałaby podobnie do akcji inteligentnej zamiany, ale zjadłaby to okno, powodując większe okno w wybranym punkcie i mniejsze wybrane okno (zjedzone okno) w górę). Stosunek należy w tym przypadku określić jako połowę, jedną czwartą lub jedną trzecią.
Jednym ze sposobów jest użycie windmove
. Dzięki domyślnym skrótom klawiszowym umożliwia przejście do okna obok aktualnie aktywnego.
Jest wbudowany w Emacsa, więc nie trzeba niczego instalować; po prostu aktywuj go za pomocą następującej minimalnej konfiguracji w pliku init:
(windmove-default-keybindings)
Następnie można przejść do sąsiednich okien za pomocą następujących klawiszy (gdzie strzałka używany intuicyjnie określa kierunek, w którym przemieszcza się): S-<left>
, S-<right>
, S-<up>
, S-<down>
.
Jeśli wolisz użyć innego modyfikatora zamiast shift, możesz podać go jako argument windmove-default-keybindings
. Na przykład:
(windmove-default-keybindings 'meta)
lub
(windmove-default-keybindings 'control)
Więcej informacji na stronie Emacs Wiki .
(windmove-default-keybindings 'meta)
Jak sugerowano w EmacsWiki.
Shift-arrow
) , ale kiedy masz duży monitor z dużą ilością podziałów, taki ruch szybko staje się niewygodny. Bardziej interesujące byłoby wyliczenie okien / podziałów. Podobnie jak ace-window
, ale z mniejszą liczbą naciśnięć klawiszy i oczywistym algorytmem, aby natychmiast dowiedzieć się, którą liczbę chcesz.
Możesz powiązać other-window
z łatwiejszą do wpisania sekwencją klawiszy.
Na przykład C-.
związałem się other-window
i C-,
poszedłem do poprzedniego okna.
(global-set-key (kbd "C-.") #'other-window)
(global-set-key (kbd "C-,") #'prev-window)
(defun prev-window ()
(interactive)
(other-window -1))
Jest to szczególnie przydatne do przenoszenia wielu okien; po przytrzymaniu klawisza Control wystarczy nacisnąć jeden przycisk, aby przejść do następnego okna. Jest to o wiele łatwiejsze niż trzy naciśnięcia klawisza na ruch.
C-x o
dla other-window
jest jednym z niewielu solidnych pretendentów do tytułu „najgorszego domyślnego skrótu emacsa”. Moje rozwiązanie (podobne do Zck) polegało na ponownym powiązaniu other window
do (o wiele łatwiejszej) sekwencji klawiszy - mam do tego przywiązany C-;
(i moje Caps-Lock
jest zamienione, Ctrl
więc wystarczy tylko dotknąć różyczek). Przy okazji, jestem całkowicie zależny od niektórych funkcji helm
i icicles
(tj. Nie jestem „anty-pakietami” ani nic takiego); Po prostu myślę, że proste rozwiązanie działa tutaj najlepiej.
M-o
dla other-window
. Niektóre tryby już M-o
wiązania, zwłaszcza diff-mode
, ggtag-mode
i ibuffer-mode
. Musisz ręcznie odznaczyć go w każdej mapie trybów. unbind-key
dostarczone przez bind-key.el
jest bardzo przydatne.
M-o
również, i M-O
wiąże się ace-window
dla kiedy potrzebują dodatkowego zasilania.
window-numeracja.el!
Przypisuję skróty „, 1”, „, 2”, „, 3”, aby przełączyć określone okno (pamiętaj, że używam trybu zła)
poza tym wyświetlam numer okna na linii trybu w RÓŻOWYM kolorze, podkreślony.
To wizualna wskazówka, której nigdy nie możesz zignorować,
To najszybszy sposób na przełączenie okna.
sprawdź https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-evil.el i https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-modeline .el dla mojej konfiguracji.
Sylvain Benner przyjął mój pomysł w postaci znaków kosmicznych, ale skróty klawiszowe są inne . Więc jeśli korzystasz z kosmicznych, otrzymujesz najszybsze rozwiązanie od razu po wyjęciu z pudełka.
window-number
z, M-<num>
aby szybko przełączać okna czarno-białe. Podobna koncepcja do tej
Bez korzystania z żadnych dodatkowych dodatków możesz nadal używać C-x o
opcjonalnego prefiksu, aby pomijać tak wiele okien. Np .: C-u 1 C-x o
przejdzie do następnego okna w kolejności (tzn. Co uzyskasz zwykłym C-x o
), C-u 2 C-x o
przejdzie dwa okna, C-u 3 C-x o
przejdzie trzy okna i tak dalej.
Fragment dokumentacji other-window
(funkcja wywoływana przez C-x o
:
COUNT określa liczbę okien do pominięcia, zaczynając od wybranego okna, przed dokonaniem wyboru. Jeśli COUNT ma wartość dodatnią, pomiń COUNT okna do przodu. Jeśli COUNT jest ujemne, pomiń -COUNT okna do tyłu. COUNT zero oznacza, że nie pomijaj żadnego okna, więc wybierz wybrane okno. W wywołaniu interaktywnym COUNT jest argumentem przedrostka numerycznego. Zwróć zero.
Niektóre osoby mogą pamiętać krótkie edytor (wystarczająco zabawnie wyprodukowany przez firmę o nazwie Underware).
Miał fajny sposób przełączania się między widocznymi oknami. Strzałka M przesuwałaby kursor do okna bezpośrednio zgodnie z kierunkiem klawisza strzałki.
Więc zmapowali winmove-left
, winmove-right
, winmove-up
oraz winmove-down
funkcje M-left
, M-right
, M-up
a M-down
klucze w następujący moim pliku .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
Teraz mogę z łatwością poruszać się między oknami, niezależnie od tego, jak zaśmiecona jest moja konfiguracja ... I może być dość zagracona wielkością wyświetlaczy w dzisiejszych czasach ...
(windmove-default-keybindings 'meta)
!
Jeśli używasz Sople następnie C-x o
pozwala wybrać okna o nazwie (lub na rowerze).
Bez prefiksu arg C-x o
jest taki sam jak zwykle, other-window
chyba że ramka ma tylko jedno okno, w którym to przypadku jest other-frame
.
Z prefiksem arg C-x o
oznacza wiele poleceń, które umożliwiają nawigację między oknami lub ramkami według nazwy (lub cyklicznie). Poruszanie się między oknami odbywa się za pomocą wielu poleceń icicle-select-window
; nawigacja między zastosowaniami ramek icicle-select-frame
.
To, która nawigacja jest używana, zależy od prefiksu arg:
Zero prefiks arg (np. C-0
): Jeśli wybrana ramka ma wiele okien, oznacza to
icicle-select-window
, że okna są w tej samej ramce co kandydaci. W przeciwnym razie (rama pojedynczego okna), to jest icicle-select-frame
.
C-u
: Jeśli wybrana ramka ma wiele okien, oznacza to
icicle-select-window
, że okna ze wszystkich widocznych ramek są kandydatami. W przeciwnym razie tak jest icicle-select-frame
.
C-u C-u
: icicle-select-window
, z oknami ze wszystkich ramek jako kandydatów (w tym ikonami lub ukrytymi ramkami).
Jak zawsze w Icicles , możesz łączyć (a) uzupełnianie , wpisując tekst, aby zawęzić zestaw pasujących kandydatów (w tym przypadku nazwy okien lub ram), z (b) cyklicznymi (między pasującymi kandydatami).
Rozważ użycie klawisza-akordu do szybkiego przeskakiwania między oknami. Uważam, że jest to znacznie szybsze niż sięganie po klawisz modyfikujący (i mniej obciążające moje ręce).
Mój wybór pakietu to taki ace-window
, który pozwala łatwiej nawigować po wielu oknach other-window
.
(require 'key-chord)
(key-chord-define-global "xo" 'ace-window)
(key-chord-mode +1)
Oczywiście do korzystania z tego potrzebujesz key-chord
i ace-window
oba są dostępne w Melpa.
ace-window
wykonuje pracę jak w odpowiedzi @ abo-abo. Uderza mnie, że w tym kontekście specyficzne użycie klawiszy byłoby bardziej sensowne niż komentarz. Tylko moje dwa centy.
key-chord
umożliwia wiązanie bardzo dostępnych kombinacji kluczy. Przykładowe wiązanie xo
jest szybsze niż C-x o
(głębokość jeden kontra dwa). Tę odpowiedź można przeformułować, aby podkreślić, że odpowiedź jest ortogonalna w stosunku do innych odpowiedzi dotyczących wyboru funkcji (i ace-window
jest tylko jedną z wielu opcji, które można powiązać w opisany sposób). Zachowaj tę odpowiedź jako wyraźną!
Kilka dobrych odpowiedzi tutaj, jestem również fanem WinMove, ale wiążę go z C-, ponieważ tryb org używa M- do manipulowania nagłówkami
(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)
Naprawdę dobrze jest, jeśli połączysz go z Hydrą . Podążając za przykładami na ich wiki , stworzyłem własnego potwora:
(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)
Pozwala mi to zmieniać okna, zmieniać ich rozmiar, przenosić bufory z okna do okna, buforować cyklicznie, zabijać bufory, a nawet cofać konfiguracje okien poprzez tryb Zwycięzca, a także integruje ster. Aby wyjść z hydry, wystarczy nacisnąć strzałkę lub inny klawisz, którego nie ma w hydrze. Możesz znaleźć funkcje „hydra-move” na przykładach hydry . Wspaniałą rzeczą w hydrze jest to, że nie muszę pamiętać wszystkich tych skrótów klawiszowych i ich „modnego”, więc kiedy jesteś w hydrze, wszystko jest dostępne jako pojedynczy klawisz naciśnij.
(windmove-default-keybindings 'control)
.
Jeśli używasz evil-mode
, możesz po prostu użyć prefiksu numerycznego za pomocą C-w C-w
( evil-window-next
), aby wybrać żądane okno. Więc: 1 C-w C-w
wybiera pierwsze okno w cyklicznej kolejności, 3 C-w C-w
wybiera trzecie okno w cyklicznej kolejności i tak dalej.
Ace Jump pozwala nawigować wskaźnikiem do wszystkich słów na ekranie, niezależnie od okna lub ramki, więc nie różni się tak bardzo od korzystania z Ace Window lub Switch Window.
Zaletą może być to, że podczas przeskakiwania okien można również precyzyjnie umieścić wskaźnik.
Nadal uważam, że jest to trochę kłopotliwe lub rozpraszające, i używam windmove
więcej, ponieważ jest to bardzo proste, ale nadal używam Ace Jump, gdy czytam w innym oknie lub ramce i chcę się tam przenieść.
Jak zwykle istnieje sto różnych sposobów osiągnięcia tego celu. Mój preferowany sposób to korzystanie z NumberedWindows . Następnie ustawiam następujący skrót klawiszowy za pomocą Super i klawiszy 1-9.
(global-set-key (kbd "s-1") (lambda() (interactive) (window-number-select 1)))
Zagłębiam się bardziej szczegółowo na ten temat w moim ostatnim poście, który możesz przeczytać w Afternoon Coder .
Możesz także zdecydować się na użycie przełącznika jako wizualnego zamiennikaC-x o
switch-window
stosunku do wszystkich innych?