2 विंडो इमैक में बफ़र्स को स्वैप कैसे करें


98

मैं emacs का उपयोग कर रहा हूं मुझे लगता है कि कभी-कभी मेरे पास 2 फाइलें 2 खिड़कियों में अलग हो जाती हैं।

उदाहरण के लिए: मैं 1 फ़ाइल का उपयोग करके खोलता हूं C-x C-f file1.c RET

और मैंने फ्रेम को दो विंडो में विभाजित किया है: C-x 3

मैं फिर एक और फाइल खोलता हूं C-x C-f file2.c RET

इसलिए मेरे पास 2 फाइलें हैं:

खिड़की 1 (बाएं) file1.c

खिड़की 2 (दाएं) file2.c

मुझे आश्चर्य है कि क्या फाइलों को स्वैप करने के लिए कोई महत्वपूर्ण संयोजन है? आम तौर पर मुझे बाईं ओर काम करना पसंद है जब मेरे पास 2 खिड़की है। मुझे पता है कि मैं C-x oकर्सर को सही विंडो पर स्थानांतरित करने के लिए आसानी से कर सकता हूं ।

हालाँकि, मैं बस सोच रहा हूं कि क्या मैं फ़ाइलों को स्वैप कर सकता हूं ताकि file2.cबाईं विंडो में हो और file1.cसही विंडो में हो?


यह भी काम करता है (emacs24 में परीक्षण किया गया है): दो बफ़र्स ट्रांसपोज़ करना ऐसा लगता है जैसे कि बाहबर जवाब
भतीजे

जवाबों:


88

मैं इसके लिए बफर-मूव का इस्तेमाल करता हूं । अब यदि आप बाईं ओर बफर पर काम कर रहे हैं, तो 'buf-Move-right' को कॉल करने पर यह दाईं ओर एक स्वैप होगा। मुझे लगता है कि आप यही चाहते हैं।


यह समाधान एकदम सही है, और टिप्पणियाँ बहुत स्पष्ट हैं - बस सुनिश्चित करें कि आप उन्हें पढ़ते हैं :)
मार्टिन क्लार्क

3
यदि आप बस खिड़कियों को स्वैप करना चाहते हैं (चयनित एक पर स्वतंत्र), तो आप निम्न का उपयोग कर सकते हैं(defun win-swap () "Swap windows using buffer-move.el" (interactive) (if (null (windmove-find-other-window 'right)) (buf-move-left) (buf-move-right)))
mefiX

बफ़र-चाल ने मेरे लिए सिर्फ दो खिड़कियों के लेआउट के साथ win-swapकाम नहीं किया, लेकिन इसके साथ ही ठीक काम किया, धन्यवाद!
डॉल्ज़ेंको

1
कि बफर-चाल स्रोत के अंदर आप के लिए सभी महत्वपूर्ण मैपिंग के बारे में एक टिप्पणी देखेंगे C-S-upकरने buf-move-upआदि
मीका इलियट

34

पक्षांतरित फ्रेम पुस्तकालय flipping या फ्रेम में खिड़की व्यवस्था घूर्णन के लिए कार्यों की एक बहुत व्यापक सेट प्रदान करता है।

M-x flop-frame RET इस विशेष प्रश्न की आवश्यकता क्या है।

निम्नलिखित चित्र पुस्तकालय में टिप्पणी (और इसके EmacsWiki पृष्ठ) से हैं:

transpose-frame  Swap x-direction and y-direction

       +------------+------------+      +----------------+--------+
       |            |     B      |      |        A       |        |
       |     A      +------------+      |                |        |
       |            |     C      |  =>  +--------+-------+   D    |
       +------------+------------+      |   B    |   C   |        |
       |            D            |      |        |       |        |
       +-------------------------+      +--------+-------+--------+

flip-frame  Flip vertically

       +------------+------------+      +------------+------------+
       |            |     B      |      |            D            |
       |     A      +------------+      +------------+------------+
       |            |     C      |  =>  |            |     C      |
       +------------+------------+      |     A      +------------+
       |            D            |      |            |     B      |
       +-------------------------+      +------------+------------+

flop-frame  Flop horizontally

       +------------+------------+      +------------+------------+
       |            |     B      |      |     B      |            |
       |     A      +------------+      +------------+     A      |
       |            |     C      |  =>  |     C      |            |
       +------------+------------+      +------------+------------+
       |            D            |      |            D            |
       +-------------------------+      +-------------------------+

rotate-frame  Rotate 180 degrees

       +------------+------------+      +-------------------------+
       |            |     B      |      |            D            |
       |     A      +------------+      +------------+------------+
       |            |     C      |  =>  |     C      |            |
       +------------+------------+      +------------+     A      |
       |            D            |      |     B      |            |
       +-------------------------+      +------------+------------+

rotate-frame-clockwise  Rotate 90 degrees clockwise

       +------------+------------+      +-------+-----------------+
       |            |     B      |      |       |        A        |
       |     A      +------------+      |       |                 |
       |            |     C      |  =>  |   D   +--------+--------+
       +------------+------------+      |       |   B    |   C    |
       |            D            |      |       |        |        |
       +-------------------------+      +-------+--------+--------+

rotate-frame-anti-clockwise  Rotate 90 degrees anti-clockwise

       +------------+------------+      +--------+--------+-------+
       |            |     B      |      |   B    |   C    |       |
       |     A      +------------+      |        |        |       |
       |            |     C      |  =>  +--------+--------+   D   |
       +------------+------------+      |        A        |       |
       |            D            |      |                 |       |
       +-------------------------+      +-----------------+-------+

2
flop-frameकेवल तभी काम करता है जब खिड़कियों के बीच का विभाजन लंबवत हो, क्षैतिज विभाजन के लिए जिसकी आपको आवश्यकता होती है flip-frame। हालांकि, rotate-frameचाहे जो भी काम करता हो; दो खिड़कियों के बीच बफ़र्स को स्वैप करने के लिए एक कमांड, कोई फर्क नहीं पड़ता कि विभाजन अभिविन्यास :)
किंवदंतियों 2k

33

Emacs 26.1 NEWS फाइल में निम्नलिखित प्रविष्टि है:

+++
*** New command 'window-swap-states' swaps the states of two live
windows.

जो समान कार्यक्षमता प्रदान करने के लिए प्रतीत होता है, crux-transpose-windowsलेकिन कुछ ऊंचाई / चौड़ाई ट्रांसपोज़िशन भी कर सकता है?


हां, यह काम करता है। मेरे पास Emacs> 26.1 है। M-x window-swap-statesदो खिड़कियों के बीच बफ़र्स स्वैप किया।
सम्राट देबरॉय

15

यदि आप प्रस्तावना का उपयोग कर रहे हैं तो आप बस C-c s( prelude-swap-windows) का उपयोग कर सकते हैं । प्रस्तावना प्रलेखन से:

C-c sकमांड चलाता है crux-swap-windows(पाया जाता है prelude-mode-map), जो क्रुक्सेलcrux-transpose-windows में एक उपनाम है ।


प्रस्तावना एक कौर की तरह लगती है (और इसे कहीं भी पैक नहीं किया जाता है - curl | sh= wtf?), लेकिन क्रुक्स यकीन है कि अच्छा लग रहा है और पहली बार में अपने दम पर लुढ़का हुआ सामान करता है।
अनारकट

मुझे पता curl | shहै कि मैं क्या कह रहा हूं: यह बुराई है।
अनारकट

11

मैं ऐसा करने वाले किसी भी अंतर्निहित कार्य से अवगत नहीं हूं।

हालांकि, इसे करने के लिए कुछ विशिष्ट कोड़ा करना बहुत मुश्किल नहीं है। डेविल हालांकि विवरण में है।

(defun swap-buffers-in-windows ()
  "Put the buffer from the selected window in next window, and vice versa"
  (interactive)
  (let* ((this (selected-window))
     (other (next-window))
     (this-buffer (window-buffer this))
     (other-buffer (window-buffer other)))
    (set-window-buffer other this-buffer)
    (set-window-buffer this other-buffer)
    )
  )

विशेष रूप से, यह वह नहीं हो सकता है जो आप उस संबंध में चाहते हैं जहां देखभाल समाप्त होती है। हालाँकि, आपको सबसे पहले यह कहना होगा कि आप क्या चाहते हैं: p


मैंने इस कोड को कॉपी और पेस्ट किया है, और यह कुछ भी करने के लिए प्रतीत नहीं होता है।

ओह, क्षमा करें, यह कुछ करता है, यह Emacs विंडो के ऊपरी और निचले हिस्सों को स्वैप करता है। मैं इसे फ्रेम स्वैप करने की उम्मीद कर रहा था।

ठीक है। तुम मुझे भ्रमित कर रहे हो। आपने Cx 3 का उल्लेख किया है। यह 2 एमएसीएस विंडो बनाना है, न कि 2 एमएसीएस फ्रेम। क्या आप फ्रेम या खिड़कियों का उपयोग कर रहे हैं? आप खिड़कियों को क्या कहते हैं और फ्रेम को क्या कहते हैं?
8

इसके अलावा, आपने ऊपर और नीचे के हिस्सों के बारे में बात नहीं की। क्या आपके पास एक बार में 2 से अधिक बफ़र दिख रहे हैं?
५५ बजे बाहबर २१'०

मैं ऐसा व्यक्ति नहीं हूं जिसने सवाल पूछा है, मैं सिर्फ एक इंटरप्रेन्योर हूं। मैंने इस प्रश्न को देखने से पहले कभी भी Cx 3 का उपयोग नहीं किया था, लेकिन जैसा कि आप कहते हैं कि यह Emacs विंडो को विभाजित करता है, बजाय एक नया फ्रेम बनाने के।

1

यदि आपके पास प्रस्तावना है, तो आप इक्का-खिड़की का उपयोग कर सकते हैं S-w। वहाँ से आप उनके डॉक्स में सूचीबद्ध कई काम कर सकते हैं ।

आप ऐस-विंडो को कॉल करके भी शुरू कर सकते हैं और फिर हटाने या स्वैप आदि के लिए कार्रवाई स्विच करने का निर्णय ले सकते हैं। डिफ़ॉल्ट रूप से बाइंडिंग हैं:

x - विंडो हटाएं

m - स्वैप (चाल) खिड़की

सी - विभाजन खिड़की काफी, खड़ी या क्षैतिज रूप से

v - विभाजित विंडो लंबवत

बी - विभाजन खिड़की क्षैतिज रूप से

n - पिछली विंडो का चयन करें

...

तो यह होगा S-w m


Spacemacs उपयोगकर्ताओं के लिए, के ace-swap-windowलिए बाध्य है SPC w M। यह कार्यक्षमता डिफ़ॉल्ट रूप से उपलब्ध है।
क्लाउडियो

0

निम्न कोड स्निपेट स्विच बफ़र कर सकता है।

(defun ab/switch-buffer-each-other (arg)
  "switch current buffer with other window buffer 
   right-2-left and up-2-down"
  (interactive "p")
  (cond
   ((windmove-find-other-window 'right) (buf-move-right))
   ((windmove-find-other-window 'left) (buf-move-left))
   ((windmove-find-other-window 'up) (buf-move-up))
   ((windmove-find-other-window 'down) (buf-move-down)))
(message "switch buffer done"))

-1

मैं वांछित स्थान पर फ़ाइल # 2 खोलने का प्रयास करूँगा, अर्थात जब आप cx 3 को हिट करेंगे, तो दूसरी फ़ाइल पर नेविगेट करने से पहले कर्सर को cx o के साथ ले जाएँ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.