Pencereler arasında hızlıca nasıl geçiş yapabilirim?
Genellikle birden fazla pencerem açık ve aralarında geçiş yapmam gerekiyor. Şu anda C-x oistediğim kişiye ulaşmak için kullanıyorum . Bunun için daha verimli bir iş akışı var mı?
Pencereler arasında hızlıca nasıl geçiş yapabilirim?
Genellikle birden fazla pencerem açık ve aralarında geçiş yapmam gerekiyor. Şu anda C-x oistediğim kişiye ulaşmak için kullanıyorum . Bunun için daha verimli bir iş akışı var mı?
Yanıtlar:
Açıkçası bunun için ace- window'u tercih ediyorum . Görünür pencereler ve çerçeveler arasında geçiş yapabilirsiniz. MELPA'da hızlıca yükleyebilirsiniz. Yapacak tek şey onu bağlamak.
(global-set-key (kbd "C-x o") 'ace-window)
Ya da belki daha kısa bir anahtar akoru kullanın, çünkü pencereleri değiştirmek yaygın bir iştir:
(global-set-key (kbd "M-p") 'ace-window)
ace-windowBunun için açılan bir yedek other-window. Sonuncusundan farklı olarak, ace-windowbir pencere seçmek için asla iki veya daha fazla kez aramanız gerekmez : bir aramada istediğiniz bir pencereyi seçersiniz (muhtemelen birden fazla karede).
Pencereleri değiştirmenin yanı sıra ace-windowdaha fazlasını yapabilirsiniz (pencereleri silme veya değiştirme vb.), README'ye bakınız .
ace-windowve kullandım switch-window. komik görünüyor, iki paketimiz de var.
switch-windowgönderilinceye kadar farkında ace-windowdeğildim.
ace-window, sanırım diğer paketlerden daha fazla kişiselleştirmeye sahip. Gelecekte, yine de biri yardımcı olabilir, akıllı takas eylemine benzer şekilde işlev görecek bir fonksiyona anahtarlık yapmak, ancak o noktayı daha büyük bir pencereye ve daha küçük seçilen bir pencereye (yenen bir pencereye sahip olmakla) sonuçlanan bir fonksiyona bağlamaktır. penceresini aç). Bu durumda oran, yarı yarıya, dördüncü ya da üçte biri olarak belirlenmelidir.
Bir yol kullanmaktır windmove. Varsayılan tuş bağlarıyla, aktif olanın yanındaki pencereye geçilmesine izin verir.
Emacs'ta yerleşiktir, bu nedenle herhangi bir şey yüklemeye gerek yoktur; sadece init dosyanızda aşağıdaki asgari kurulumla etkinleştirin:
(windmove-default-keybindings)
Ardından (sezgisel olarak kullanılan ok taşımak hangi yönde tanımlar) aşağıdaki tuşları kullanarak komşu pencereleri geçebilirsiniz: S-<left>, S-<right>, S-<up>, S-<down>.
Bunun yerine başka bir değiştirici kullanmayı tercih shiftederseniz, bunu bir argüman olarak sağlayabilirsiniz windmove-default-keybindings. Örneğin:
(windmove-default-keybindings 'meta)
veya
(windmove-default-keybindings 'control)
Emacs Wiki'de daha fazla bilgi .
(windmove-default-keybindings 'meta)EmacsWiki'de önerildiği gibi bir argüman olarak kabul ettiğini belirtmek için cevabı güncellemeye değer .
Shift-arrow) , ancak çok fazla bölünmüş büyük bir monitörünüz olduğunda, bu tür bir hareket çabucak hantallaşıyor. Bir şekilde pencereleri / bölmeleri saymak daha ilginç olurdu. Gibi ace-window, ancak daha az tuşa basıldığında ve istediğiniz numarayı hemen bulmak için açık bir algoritma ile.
Daha other-windowkolay yazılabilir bir tuş sırasına bağlayabilirsiniz .
Örneğin, ben var C-.bağlı other-windowve C-,önceki pencereye gitmek bağlıdır.
(global-set-key (kbd "C-.") #'other-window)
(global-set-key (kbd "C-,") #'prev-window)
(defun prev-window ()
(interactive)
(other-window -1))
Bu özellikle birden fazla pencereyi taşımak için kullanışlıdır; Control tuşunu basılı tuttuğunuzda, bir sonraki pencereye geçmek için sadece bir düğmeye basmanız yeterlidir. Bu, hamle başına üç tuşa basmaktan çok daha kolaydır.
C-x oiçin other-window"en kötü varsayılan emacs kısayol" başlığı için bir kaç katı yarışmacının biri. Benim çözümüm (zck'e benzer other window) daha kolay bir anahtar dizilimine yeniden bağlamaktı (buna bağlı kaldım C-;(ve benim Caps-Lockyer değiştirdiğim Ctrliçin pinkies'e hızlıca dokunmak gerekiyor). Btw, ben belirli özelliklerinden tamamen bağımlı değilim helmve icicles(yani değilim "Anti-paketleri" ya da bir şey); Sadece basit bir çözümün burada en iyi sonucu verdiğini düşünüyorum.
M-oiçin other-window. Bazı modlar zaten M-obağlayıcı, özellikle diff-mode, ggtag-modeve ibuffer-mode. Her mod haritasında elle ayırmanız gerekir. unbind-keytarafından sağlanan bind-key.elçok yararlıdır.
M-obuna M-Obağlı kaldım ace-window.
window-numbering.el!
Belirli pencereyi değiştirmek için ", 1", ", 2", ", 3" kısayol tuşlarını atarım (lütfen kötü mod kullandığımı unutmayın)
ayrıca, mod satırındaki pencere numarasını PINK renginde, altı çizili olarak görüntülerim.
Asla görmezden gelemeyeceğin görsel bir ipucu,
Pencereyi değiştirmenin en hızlı yolu budur .
https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-evil.el ve https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-modeline adresini kontrol edin. .el benim kurulum için.
Sylvain Benner fikrimi uzay haritalarında benimsemiştir, ancak anahtarlıklar farklıdır . Böylece boşluk kullanıyorsanız, kutudan en hızlı çözümü alırsınız.
window-numberile M-<num>hızlı bir şekilde pencere w / b geçmek için. Buna benzer bir kavram
Herhangi bir ek eklenti kullanmadan C-x o, bu kadar fazla pencereyi atlamak için isteğe bağlı bir önekle kullanmaya devam edebilirsiniz . Örn: C-u 1 C-x osırayla bir sonraki pencereye gidecektir (yani düz ile ne elde edersiniz C-x o), C-u 2 C-x oiki pencereye, C-u 3 C-x oüç pencereye, vb.
other-windowDokümantasyondan bir alıntı (işlevinin çağırdığı işlev C-x o:
COUNT, seçimi yapmadan önce, seçilen pencereden başlayarak atlanacak pencerelerin sayısını belirtir. COUNT pozitifse, COUNT pencereyi ileriye atlayın. COUNT negatifse, -COUNT pencereyi geriye atlayın. Sıfır COUNT, herhangi bir pencereyi atlamadığı için seçilen pencereyi seçin. Etkileşimli bir aramada, COUNT sayısal önek argümanıdır. Sıfırın.
Bazı insanlar Brief editörünü (Underware adlı bir şirket tarafından üretilen yeterince komik) hatırlayabilir.
Görünür pencereler arasında geçiş yapmak için düzgün bir yol vardı. M-ok, imleci cama doğrudan ok tuşunun yönünde gelecek şekilde hareket ettirir.
Yani, eşlenen winmove-left, winmove-right, winmove-upve winmove-downişlevleri M-left, M-right, M-upve M-downbenim .emacs dosyasında tuşları aşağıdaki gibi -
(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
Artık, ne kadar karmaşık bir yapıya sahip olduğumdan bağımsız olarak pencereler arasında kolaylıkla hareket edebiliyorum ... Günümüzde ekranların boyutuyla da oldukça karışık olabiliyor ...
(windmove-default-keybindings 'meta)!
Eğer kullanırsanız Icicles sonra C-x oetmenizi sağlar tarafından pencereler seçmek adına (veya bisiklet ile).
Hiçbir önek argümanı olmadan, çerçevenin sadece bir penceresi olmadıkça, C-x onormalde olduğu gibi aynıdır .other-windowother-frame
Bir önek argümanıyla, pencereler veya çerçeveler arasında ada (veya bisiklete binerek) göre gezinmenizi sağlayan çok komutlu C-x obir komuttur . Pencereler arasında gezinmek için çoklu komut kullanılır icicle-select-window; çerçeveler arasında gezinti kullanır icicle-select-frame.
Hangi navigasyonun kullanılması önek argümanına bağlıdır:
Sıfır önek arg (örneğin C-0): Seçilen çerçeve birden fazla pencere varsa, o zaman bu
icicle-select-windowpencere ile aynı çerçeve adayları olarak. Aksi takdirde (tek pencere çerçevesi) budur icicle-select-frame.
C-u: Seçilen karenin birden fazla penceresi varsa, bu durumda
icicle-select-window, tüm görünür karelerin pencereleri aday olarak görünür . Aksi takdirde, bu icicle-select-frame.
C-u C-u: icicle-select-window, tüm çerçevelerden pencereleri aday olarak gösterme
Her zaman olduğu gibi içinde Icicles için (a) birleştirebilirsiniz tamamlama , (b) ile, (bu durumda pencere veya çerçeve adları) adayları eşleştirme kümesini daraltmak için metin yazarak, bisiklet (eşleşen aday arasından).
Pencereler arasında hızlıca zıplamak için bir anahtar akoru kullanmayı düşünün . Bir değiştirici tuşa ulaşmaktan (ve ellerimde daha az zorlanmak) ulaşmaktan çok daha hızlı buluyorum.
Kullanacağım paket seçimi ise ace-windowbirden fazla pencerede gezinmekten çok daha kolay other-window.
(require 'key-chord)
(key-chord-define-global "xo" 'ace-window)
(key-chord-mode +1)
Açıkçası bunu kullanmak için ihtiyacınız key-chordve ace-windowher ikisi de melpa'da mevcuttur.
ace-windowişi @ abo-abo'nun cevabında olduğu gibi yapıyor. Bu bağlamda, kullanılacak belirli bir anahtarlamanın bir cevaptan çok bir yorum olarak daha anlamlı olacağı bana dikkat çekiyor. Sadece iki sentim.
key-chordçok erişilebilir tuş kombinasyonlarının bağlanmasına izin verir. Örnek bağlama xo, daha hızlıdır C-x o(bir ile iki arasındaki derinlik). Bu cevap, cevabın fonksiyon seçimi ile ilgili diğer cevaplara ortogonal olduğunu vurgulamak için yeniden cevaplandırılabilir (ve ace-windowtarif edilen şekilde bağlı olabilecek birçok seçimlerden sadece biridir). Bu cevabı farklı tut!
Burada bazı iyi cevaplar, ayrıca WinMove hayranıyım, ama C-'ye bağlarım çünkü org-mode başlıkları değiştirmek için M- kullanır.
(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)
Gerçekten iyi olduğunda, Hydra ile birleştirirseniz olur . Vikileri üzerindeki örnekleri takip ederek kendi canavarımı yarattım:
(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)
Bu, pencereleri değiştirmemi, bunları yeniden boyutlandırmamı, arabellekleri pencereden pencereye taşımamı, arabellekleri kapatmamı, arabellekleri öldürmeyi ve hatta pencere yapılandırmalarını kazanan moduyla geri almamı sağlar ve ayrıca dümeni birleştirir. Hidradan çıkmak için, sadece ok veya hydra'da bulunmayan başka bir tuşa basın. Hydra örnekleri üzerinde "hydra-move" işlevlerini bulabilirsiniz. Hydra ile ilgili en güzel şey, tüm bu anahtar bağlarını ve "modunu" hatırlamama gerek kalmaması, yani bir kez hidrada bulunduğunuzda her şey tek bir anahtar olarak kullanılabilir. basın.
(windmove-default-keybindings 'control).
Eğer kullanırsanız evil-mode, sadece bir sayısal öneki kullanabilirsiniz C-w C-w( evil-window-nextistediğiniz pencereyi seçmek için). Yani: 1 C-w C-wilk pencereyi döngüsel sırayla 3 C-w C-wseçer, üçüncü pencereyi döngüsel sırayla seçer vb.
Ace Jump , hangi pencerede veya çerçevede olduklarından bağımsız olarak işaretçinizi ekrandaki tüm kelimelere yönlendirmenize izin verir, bu yüzden Ace Window veya Pencereyi Değiştir seçeneğinden farklı değildir.
Bir avantaj, pencereleri zıplatırken işaretçinizi bir miktar hassasiyetle yerleştirebilmeniz olabilir.
Hala biraz hantal veya rahatsız edici buluyorum ve windmovedaha fazlasını kullandığımı biliyorum , çünkü çok basit, ama yine de başka bir pencerede veya çerçevede okurken ve orada bir noktaya taşınmak istediğimde hala Ace Jump kullanıyorum.
Her zamanki gibi, bunu başarmanın yüzlerce yolu var. Tercih ettiğim yol, NumberedWindows kullanıyor . Sonra Super ve 1-9 tuşlarını kullanarak aşağıdaki tuş takımını ayarladım.
(global-set-key (kbd "s-1") (lambda() (interactive) (window-number-select 1)))
Öğleden sonra kodlayıcıda okuyabileceğiniz son bir yazı ile bu konu hakkında biraz daha ayrıntıya giriyorum .
Geçiş penceresini görsel olarak değiştirme olarak kullanmaya da karar verebilirsiniz.C-x o
switch-windowdiğerlerinin üzerinde kullanmaya karar verdi ?