W Emacsie C-x oprzenosi mnie do następnego okna.
Jakie makro klawiatury przenosi mnie do poprzedniego okna w Emacsie?
W Emacsie C-x oprzenosi mnie do następnego okna.
Jakie makro klawiatury przenosi mnie do poprzedniego okna w Emacsie?
Odpowiedzi:
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)
(windmove-default-keybindings)
wiąże te funkcje z SHIFT + góra / dół / lewo / prawo, co moim zdaniem jest wygodniejsze niż twoje C-x
powiązania (które kolidują z również użytecznymi domyślnymi powiązaniami dla previous-buffer
i next-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żywasz C-h k
lub C-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 )
C-x C-j
, ponieważ jest to domyślne wiązanie dla dired-jump
ciebie (require 'dired-x)
. (Sprawdź, M-x customize-group RET dired-keys RET
czy chcesz to zmienić.)
switch-window.el
, używa C-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 tym window-number
trikiem, masz co do tego rację dired-jump
. Osobiście wykonuję mniej przełączania okien i używam C-x b
samodzielnie, ale posiadanie ulepszonego C-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
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)
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)
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.
M-n
i M-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
i b
jechać left
. Ja również otrzymuje Ctrl
się Super
klucz jak C-p, C-n, C-f and C-b
to klucze ruchowe domyślne. Ta kombinacja z M
pozwala na przeskakiwanie znaków i linii zamiast przechodzenia przez jeden po drugim po każdym naciśnięciu klawisza. Dlatego Super
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!
(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.
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
(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"
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 samo wq
).
C-x z
aby powtórzyć ostatnie polecenie, aby szybko przełączyć okna.