W Emacsie C-x oprzenosi mnie do następnego okna.
Jakie makro klawiatury przenosi mnie do poprzedniego okna w Emacsie?
Tak by było C-- C-x o
Innymi słowy, C-x oz argumentem -1. Możesz określić, ile okien ma zostać przeniesionych, wstawiając argument numeryczny między C-ua poleceniem, jak w C-u 2 C-x o. ( C--jest skrótem do C-u - 1)
C-x z
aby powtórzyć ostatnie polecenie, aby szybko przełączyć okna.Możesz także spróbować użyć funkcji windmove, która umożliwia nawigację do wybranego okna na podstawie geometrii. W moim pliku .emacs mam następujące możliwości zmiany okien za pomocą klawisza strzałki Cx.
(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)
źródło
(windmove-default-keybindings)
wiąże te funkcje z SHIFT + góra / dół / lewo / prawo, co moim zdaniem jest wygodniejsze niż twojeC-x
powiązania (które kolidują z również użytecznymi domyślnymi powiązaniami dlaprevious-buffer
inext-buffer
. Lkahtz:(kbd)
funkcja pozwala określić klawisze w notacji łańcuchowej w bardziej czytelnej składni, która jest również używana przez Emacsa, gdy używaszC-h k
lubC-h c
windmove-default-keybindings
określić inny modyfikator do użycia w połączeniu z klawiszami strzałek; więc ta funkcja może być nadal przydatna dla ludzi, którzy używają trybu wyboru zmiany.Osobiście wolę używać
window-number.el
Aby wybrać inne okno, użyj Ctrl- x, Ctrl- j n
Gdzie n to numer okna, modeline każdego okna pokazuje jego numer, jak pokazano na zrzucie ekranu.
Po prostu pobierz window-number.el , umieść go w swojej ścieżce ładowania emacsa i użyj następującego w swoim
.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)
Jest inny podobny tryb o nazwie,
switch-window.el
który daje duże liczby w oknach ... (naciśnięcie numeru przełącza okno i przywraca wyświetlanie.)(źródło: tapoueh.org )
źródło
C-x C-j
, ponieważ jest to domyślne wiązanie dladired-jump
ciebie(require 'dired-x)
. (Sprawdź,M-x customize-group RET dired-keys RET
czy chcesz to zmienić.)switch-window.el
, używaC-x o
zamiast tego, a gdy są tylko dwa aktywne okna, po prostu wybiera drugie okno. Myślę, że najrozsądniej jest ponownie związać sięC-x o
z tymwindow-number
trikiem, masz co do tego racjędired-jump
. Osobiście wykonuję mniej przełączania okien i używamC-x b
samodzielnie, ale posiadanie ulepszonegoC-x o
jest całkiem przyjemne.Jeśli dużo pracujesz z wieloma oknami emacsa (> 3) i będziesz chciał zapisać niektóre naciśnięcia klawiszy, dodaj to do swojego pliku init, a będziesz lepiej:
(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)
Teraz wystarczy szybko przejść przez okna za pomocą Mo
źródło
other-window
działał.Jest tu kilka bardzo dobrych i kompletnych odpowiedzi, ale aby odpowiedzieć na pytanie w sposób minimalistyczny:
(defun prev-window () (interactive) (other-window -1)) (define-key global-map (kbd "C-x p") 'prev-window)
źródło
previous-window
wbudowany.M-x
więc powinna służyć innemu celowi.Oparty na pomyśle @Nate, ale nieznacznie zmodyfikowany, aby obsługiwać wsteczną zmianę między oknami
;; 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)
źródło
Aby dodać do odpowiedzi @Nate, @aspirin i @ Troydm, uważam to za bardzo pomocne, jeśli zdecydujesz się powiązać polecenia windmove z dowolną wybraną kombinacją klawiszy:
(setq windmove-wrap-around t)
Przy domyślnej konfiguracji pojawi się błąd, gdy spróbujesz przejść do nieistniejącego okna, co po pewnym czasie staje się denerwujące. Jednakże, gdy ustawione jest windmove-wrap-around, wówczas próba przesunięcia się na przykład poza dolną część ramy spowoduje wybranie okna znajdującego się najwyżej w ramie. Może to być dla Ciebie bardziej intuicyjne zachowanie.
źródło
M-n
iM-p
mają dla mnie największy sens, ponieważ są analogiczne doC-n
( next-line ) iC-p
( previous-line ):(define-key global-map (kbd "M-p") 'previous-multiframe-window) (define-key global-map (kbd "M-n") 'other-window)
(inspirowane tym i owym )
źródło
M-n
iM-p
są już stosowane w terminalach (gdb, Python, ielm itp), więc będziesz musiał wrócić do innej metody, aby wyskoczyć z bufora terminala.Nawiązując do odpowiedzi Nate'a, zastąpiłem
arrow keys
tradycyjne,p
aby jechaćup
,n
jechaćdown
,f
jechaćright
ib
jechaćleft
. Ja również otrzymujeCtrl
sięSuper
klucz jakC-p, C-n, C-f and C-b
to klucze ruchowe domyślne. Ta kombinacja zM
pozwala na przeskakiwanie znaków i linii zamiast przechodzenia przez jeden po drugim po każdym naciśnięciu klawisza. DlategoSuper
klucz wydawał się najlepszym wyborem, aby utrzymać go jako łatwe wiązanie klucza. Ponadto, teraz nie musisz już odrywać ręki od głównego rzędu!(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)
Mam nadzieję, że to pomoże!
źródło
(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)))
altji altkprzejdzie przez Twoje widoczne bufory. Dokładnie do przodu i do tyłu.
źródło
Istnieje już pakiet umożliwiający przełączanie okien za pomocą M-. sprawdź tę stronę internetową . Dodaj to do swojego pliku init:
(require 'windmove) (windmove-default-keybindings 'meta) ;; or use 'super to use windows key instead alt
źródło
(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"
źródło
Najszybszą metodą przełączania się do poprzedniego okna, jaką znalazłem, jest zgniecenie kilku klawiszy razem jako „akord klawiszowy” . Poniższe opcje umożliwiają jednoczesne użycie lewego małego palca + serdecznego palca, aby przejść do poprzedniego okna:
(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
(Jest to możliwe, ponieważ akordy klawiszowe Emacsa są niezależne od kolejności, co
qw
oznacza to samowq
).źródło