मैं जल्दी से खिड़कियों के बीच कैसे स्विच करूं?
मेरे पास अक्सर कई खिड़कियां खुली होती हैं और उनके बीच स्विच करने की आवश्यकता होती है। अभी, मैं 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 में बनाया गया है, इसलिए कुछ भी स्थापित करने की आवश्यकता नहीं है; बस अपनी इनिट फ़ाइल में निम्न न्यूनतम सेटअप के साथ इसे सक्रिय करें:
(windmove-default-keybindings)
इसके बाद आप निम्न कुंजियों (जहां तीर intuitively इस्तेमाल किया जिस दिशा में आप ले परिभाषित करता है) का उपयोग कर पड़ोसी खिड़कियों के लिए स्विच कर सकते हैं: 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))
यह कई खिड़कियों को स्थानांतरित करने के लिए विशेष रूप से उपयोगी है; एक बार जब आप नियंत्रण रखते हैं, तो आपको केवल एक बटन दबाकर अगली विंडो पर जाना होगा। यह प्रति चाल तीन keypresses की तुलना में बहुत आसान है।
C-x o
लिए other-window
"सबसे खराब डिफ़ॉल्ट emacs शॉर्टकट" के शीर्षक के लिए कुछ ठोस दावेदारों में से एक है। मेरा समाधान (zck के समान other window
) आसान तरीका अनुक्रम के लिए एक तरह से विद्रोह करना था - मेरे पास यह करने के लिए बाध्य है C-;
(और मेरी Caps-Lock
अदला-बदली की जाती है, Ctrl
इसलिए यह सभी पिंकी का एक त्वरित टैप है)। Btw, मैं पूरी तरह की कुछ सुविधाओं पर निर्भर कर रहा हूँ 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
सिल्वेन बेनर ने स्पेसमैक्स में मेरे विचार को अपनाया लेकिन कीबाइंडिंग अलग हैं । इसलिए यदि आप स्पेसमैक्स का उपयोग करते हैं, तो आपको बॉक्स से सबसे तेज समाधान मिलता है।
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
डॉकस्ट्रिंग से एक अंश (फंक्शन द्वारा बुलाया गया C-x o
:
COUNT चयन करने से पहले चयनित विंडो के साथ शुरू करने के लिए विंडो की संख्या निर्दिष्ट करता है। यदि COUNT सकारात्मक है, तो COUNT विंडो को आगे की ओर छोड़ें। यदि COUNT नकारात्मक है, तो विंडोज़ को पीछे छोड़ दें। COUNT शून्य का मतलब किसी भी विंडो को छोड़ना नहीं है, इसलिए चयनित विंडो का चयन करें। एक इंटरैक्टिव कॉल में, COUNT संख्यात्मक उपसर्ग तर्क है। वापस लौटें।
कुछ लोग संपादक ब्रीफ को याद कर सकते हैं (फन्नीली नाम की कंपनी द्वारा निर्मित काफी मजेदार)।
यह दृश्यमान खिड़कियों के बीच स्विच करने का एक साफ तरीका था। एम-तीर कर्सर को सीधे तीर कुंजी की दिशा के अनुसार खिड़की में ले जाएगा।
तो, मैं मैप किया 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)
!
यदि आप आईकल्स का उपयोग करते हैं तो C-x o
आपको नाम से (या साइकिल चलाकर) विंडोज़ का चयन करने देता है ।
कोई उपसर्ग arg के साथ, 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
, सभी फ़्रेमों से उम्मीदवारों के रूप में (आइकॉनिक या छिपे हुए फ़्रेम सहित)।
हमेशा आइकनों में , आप (बी) साइकलिंग (मिलान वाले उम्मीदवारों के बीच ) के साथ, मेल खाने वाले उम्मीदवारों के सेट को कम करने के लिए ( टाइपिंग ) , टाइपिंग टेक्स्ट को मेल कर सकते हैं ।
खिड़कियों के बीच जल्दी से कूदने के लिए की -कॉर्ड का उपयोग करने पर विचार करें । मैं इसे एक संशोधक कुंजी (और मेरे हाथों पर कम तनावपूर्ण) के लिए पहुंचने की तुलना में बहुत जल्दी पाता हूं।
उपयोग करने के लिए पैकेज का मेरा विकल्प है ace-window
, जो आपको कई खिड़कियों को बस से आसान नेविगेट करने देता है other-window
।
(require 'key-chord)
(key-chord-define-global "xo" 'ace-window)
(key-chord-mode +1)
जाहिर है इसका उपयोग करने के लिए आपको आवश्यकता है key-chord
और ace-window
, दोनों ही मेलपा में उपलब्ध हैं।
ace-window
@ abo-abo के उत्तर में काम कर रहा हूं । यह मुझे चौंकाता है, इस संदर्भ में, उपयोग करने के लिए विशिष्ट कीबाइंडिंग एक उत्तर के बजाय एक टिप्पणी के रूप में अधिक समझ में आता है। केवल मेरे दो सेंट्स।
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)
यह मुझे विंडो बदलने, उन्हें आकार बदलने, विंडो से विंडो में बफ़र्स ले जाने, साइकल बफ़र्स, बफ़र्स को मारने और विजेता-मोड के माध्यम से विंडो कॉन्फ़िगरेशन को पूर्ववत करने की सुविधा देता है, और यह पतवार को भी एकीकृत करता है। हाइड्रा से बाहर निकलने के लिए, बस तीर या कुछ अन्य कुंजी को हाइड्रा में दबाएं। आप हाइड्रा उदाहरणों पर "हाइड्रा-मूव" फ़ंक्शंस पा सकते हैं। हाइड्रा के बारे में महान बात यह है कि मुझे उन सभी कीबाइंडिंग और इसके "मोडफुल" को याद रखने की ज़रूरत नहीं है, इसलिए जब आप हाइड्रा में होते हैं तो सब कुछ एक ही कुंजी के रूप में उपलब्ध होता है दबाएँ।
(windmove-default-keybindings 'control)
।
यदि आप उपयोग करते हैं evil-mode
, तो आप अपनी इच्छित विंडो को चुनने के लिए C-w C-w
( evil-window-next
) के साथ एक संख्यात्मक उपसर्ग का उपयोग कर सकते हैं। तो: 1 C-w C-w
चक्रीय क्रम में पहली खिड़की 3 C-w C-w
चुनता है , चक्रीय क्रम में तीसरी खिड़की चुनता है, और आगे।
ऐस जंप आपको एक स्क्रीन पर सभी शब्दों के लिए अपने सूचक को नेविगेट करने देता है, भले ही वे किस विंडो या फ्रेम में हों, इसलिए यह ऐस विंडो या स्विच विंडो का उपयोग करने से अलग नहीं है।
एक फायदा यह हो सकता है कि खिड़कियों को कूदते समय आप कुछ सटीक के साथ अपने पॉइंटर को भी रख सकते हैं।
मुझे अभी भी यह थोड़ा बोझिल या विचलित करने वाला लगता है, और मुझे लगता है कि मैं windmove
इसका अधिक उपयोग कर रहा हूं , क्योंकि यह बहुत सरल है, लेकिन फिर भी ऐस जंप का उपयोग तब करें जब मैं किसी अन्य विंडो या फ्रेम में पढ़ रहा हूं और वहां एक स्पॉट पर जाना चाहता हूं।
हमेशा की तरह इसे पूरा करने के लिए सौ अलग-अलग तरीके हैं। मेरा पसंदीदा तरीका NumberedWindows का उपयोग कर रहा है । फिर मैंने सुपर और कीज़ 1-9 का उपयोग करके निम्नलिखित कीबाइंड सेट किया।
(global-set-key (kbd "s-1") (lambda() (interactive) (window-number-select 1)))
मैं इस सटीक विषय पर अपनी हाल की पोस्ट के साथ थोड़ा और विस्तार में जाता हूं जिसे आप दोपहर के कोडर पर पढ़ सकते हैं ।
आप स्विच-विंडो को दृश्य प्रतिस्थापन के रूप में उपयोग करने का निर्णय भी ले सकते हैंC-x o
switch-window
अन्य सभी पर उपयोग करने का निर्णय क्यों करेगा ?