2 Windows emacs'de arabellekleri nasıl değiştirilir


99

Emacs kullanıyorum, bazen 2 pencereye ayrılmış 2 dosyam olduğunu görüyorum.

Örneğin: 1 dosya açıyorum C-x C-f file1.c RET

ve çerçeveyi iki pencereye böldüm: C-x 3

Sonra başka bir dosya açıyorum C-x C-f file2.c RET

Yani 2 dosyam var:

pencere 1 (sol) file1.c

pencere 2 (sağ) file2.c

Dosyaları değiştirmek için herhangi bir tuş kombinasyonu olup olmadığını merak ediyorum. Normalde 2 pencerem varken sol pencerede çalışmayı severim. C-x oİmleci sağ pencereye kolayca taşıyabileceğimi biliyorum .

Bununla birlikte, dosyaları değiştirip değiştiremeyeceğimi merak ediyorum, file2.cbu sol pencerede ve file1.csağ pencerede mi?


Bu da işe yarıyor (emacs24'te test edildi): İki Tamponun Transpoze Edilmesi Bahbar cevabına benzer görünüyor
nephewtom

Yanıtlar:


88

Bunun için tampon hareket kullanıyorum . Şimdi, sol taraftaki tampon üzerinde çalışıyorsanız, 'buf-move-right' çağrısı onu sağdakiyle değiştirecektir. Sanırım istediğin bu.


Bu çözüm mükemmel ve yorumlar çok açık - sadece bunları okuduğunuzdan emin olun :)
Martin Clarke

3
Sadece pencereleri değiştirmek istiyorsanız (seçili pencereden bağımsız olarak), aşağıdakini kullanabilirsiniz(defun win-swap () "Swap windows using buffer-move.el" (interactive) (if (null (windmove-find-other-window 'right)) (buf-move-left) (buf-move-right)))
mefiX

buffer-move sadece iki pencere düzeniyle benim için işe yaramadı ama win-swaponunla gayet iyi çalıştı, teşekkürler!
dolzenko

1
O tampon-hamle kaynağı İçerisinde için çok önemli eşleştirmeleri hakkında bir yorum görürsünüz C-S-upiçin buf-move-upvs.
Micah Elliott

35

Emacs 26.1 NEWS dosyasında aşağıdaki giriş vardır:

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

Hangisi benzer işlevsellik sunuyor gibi görünüyor, crux-transpose-windowsancak aynı zamanda bazı yükseklik / genişlik aktarımlarını da yapabilir?


34

Devrik çerçeve kütüphane saygısız veya karelerde pencere düzenlemeleri döndürmek için fonksiyonları oldukça kapsamlı kümesi sağlar.

M-x flop-frame RET bu özel sorunun ihtiyacı olan şeyi yapar.

Aşağıdaki diyagramlar kitaplıktaki (ve onun EmacsWiki sayfasındaki) açıklamalardan alınmıştır:

‘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-frameihtiyacınız olan yatay bölme için yalnızca pencereler arasındaki bölme dikey olduğunda çalışır flip-frame. Ancak, rotate-framebağımsız olarak çalışır; Bölme yönü ne olursa olsun iki pencere arasında arabellekleri değiştirmek için bir komut :)
legends2k

16

Prelude kullanıyorsanız , sadece C-c s( prelude-swap-windows) kullanabilirsiniz . Prelude belgelerinden:

C-c skomutu çalıştırır crux-swap-windows(bulunan prelude-mode-mapbir diğer adıdır), crux-transpose-windowsiçinde crux.el .


prelüd bir ağız dolusu gibi görünüyor (ve herhangi bir yerde paketlenmemiş - curl | sh= wtf?), ama işin özü kesinlikle güzel görünüyor ve ilk başta kendi başıma yuvarladığım bir sürü şey yapıyor.
anarcat

ne curl | sholduğunu biliyorum , söylediğim şey: bu kötü.
anarcat

11

Bunu yapan yerleşik bir işlevin farkında değilim.

Bununla birlikte, bunu yapmak için biraz elisp'i kırbaçlamak çok zor görünmüyor. Şeytan ayrıntıda gizlidir.

(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)
    )
  )

Özellikle, bu, düzeltme işaretinin bittiği yere göre istediğiniz şeyi yapmıyor olabilir. Ancak, önce ne istediğinizi söylemeniz gerekir: p


Bu kodu kopyalayıp yapıştırdım ve hiçbir şey yapmıyor gibi görünüyor.

Üzgünüm, bir şey yapıyor, Emacs penceresinin üst ve alt kısımlarını değiştiriyor. Çerçeveleri değiştirmesini bekliyordum.

tamam. Kafamı karıştırıyorsun. Cx 3'ten bahsettiniz. Bu, 2 emacs çerçevesi değil, 2 emacs penceresi oluşturmak içindir. Çerçeve mi yoksa pencere mi kullanıyorsunuz? Pencerelere ne diyorsunuz ve çerçevelere ne diyorsunuz?
Bahbar

üst ve alt kısımlardan da bahsetmediniz. Aynı anda gösterilen 2'den fazla arabellek var mı?
Bahbar

Soruyu soran kişi ben değilim, sadece yardımcı bir oyuncuyum. Bu soruyu görmeden önce Cx 3'ü hiç kullanmamıştım, ancak sizin de söylediğiniz gibi yeni bir çerçeve oluşturmak yerine Emacs penceresini ikiye ayırıyor.

1

Başlangıcınız varsa, as-pencere ile kullanabilirsiniz S-w. Oradan, belgelerinde listelenen birçok şeyi yapabilirsiniz .

Ayrıca ace-window'u çağırarak başlayabilir ve ardından eylemi silme veya takas gibi değiştirmeye karar verebilirsiniz. Varsayılan olarak bağlamalar şunlardır:

x - pencereyi sil

m - takas (taşı) penceresi

c - pencereyi dikey veya yatay olarak oldukça bölmek

v - pencereyi dikey olarak böl

b - pencereyi yatay olarak böl

n - önceki pencereyi seçin

...

Yani olacak S-w m


Spacemacs kullanıcıları ace-swap-windowiçin SPC w M. Bu işlevsellik varsayılan olarak mevcuttur.
Claudio

0

Aşağıdaki kod parçacığı arabelleği değiştirebilir.

(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 numaralı dosyayı istediğiniz yerde açmaya çalışırdım, yani cx 3'e bastıktan sonra ikinci dosyaya geçmeden önce cx o ile imleci hareket ettirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.