Emacs tmux 和 vim 環境下的多視窗工作環境 – 第二季 視窗旋轉

來源:互聯網
上載者:User

 

在第一季的部分介紹了怎樣將視窗切割成自己需要的樣子。這一季我們討論一下如何對切割後視窗布局進行旋轉。為什麼需要旋轉視窗布局呢?最簡單的答案是:任何一個視窗布局,總有某一個時刻會讓你感覺無法滿足你當前的需要。這時候我們怎麼辦?改變視窗總比改變自己要好。既然選擇了改變視窗布局,如何改變就成了下一個問題。如果能有一個傳送門,讓我們直接到達想要的地方,當然要把先回到最初的單視窗模式,然後再重新切割布局要方便的多了。旋轉視窗就是這樣的一個傳送門。

 

讓我們先從常用的多視窗模式開始說起。通常所用的多視窗模式以二視窗、三視窗、四視窗為多。四個以上視窗的環境一方面是比較少用(比較螢幕空間總是有限的,視窗切的太多,每一個視窗能用的面積就很有限了),另一方面,如果真的選擇了如此複雜的視窗布局,一般也應該是經過謹慎選擇,專為某一種特定需求而打造的,通常需要重新布局的機會也不會很多。

 

所以在這裡我們只討論二視窗、三視窗、四視窗的情況。其中四視窗模式(就是田字形)由於同時具有軸對稱和中心對稱的特點,所以也不存在旋轉的必要。這樣以來,我們需要討論的就只剩下二視窗和三視窗兩種模式了。

 

二視窗模式的旋轉

二視窗的旋轉很容易理解啦。無非就是從橫向轉成豎向,再從豎向轉成橫向。  但是,這裡有一個壞訊息和一個好訊息。壞訊息是這樣簡單的事情 Emacs 的原生代碼裡面居然沒有提供直接的支援。在原生 Emacs 裡面只能選擇先使用 Ctrl-x 0 或者 Ctrl-x 1 回到單視窗模式,然後再使用 Ctrl-x 2 或者 Ctrl-x 3 重新切割。在 tmux 和 Vim 裡面,這樣的旋轉是被原生支援的。好訊息是我自己寫了一個 Emacs 擴充函數 change-split-type 來補上這個缺口。同學們在使用的時候可以自己把這個函數綁定到 Ctrl-x 4 c 上面。並且由於這個函數是自適應的,所以無論是從橫向轉成豎向,還是從豎向轉成橫向,都只需要這一個函數,及一個按鍵綁定就足夠了。

 

在下面的樣本當中仍然遵循第一季中的約定,命令/操作的樣本按如下順序給出 Emacs - tmux - vim

 

#+BEGIN_EXAMPLE


+--------------------------------+ +----------------+----------------+
| | change-split-type | | |
| a | Ctrl-b Alt-1 | | a |
| | Ctrl-w L | | |
+--------------------------------+ ----------------> | | |
| | | | |
| | | | |
| | | | |
+--------------------------------+ +----------------+----------------+

+---------------+----------------+ +--------------------------------+
| | | change-split-type | |
| a | | Ctrl-b Alt-2 | a |
| | | Ctrl-w K | |
| | | ----------------> +--------------------------------+
| | | | |
| | | | |
| | | | |
+---------------+----------------+ +--------------------------------+


#+END_EXAMPLE

 

三視窗模式的旋轉

另外,由於視窗旋轉涉及到的問題比較複雜,所以這次我們要把 Eamcs, tmux 和 Vim 分開來講。首先是 Emacs

 

Emacs 的三視窗旋轉

也許你已經猜到了,三視窗的旋轉在 Emacs 當中也沒有提供原生的支援。好訊息是我也寫了一個 Emacs 擴充函數 change-split-type-3 來解決這個問題。這個函數也是一個自適應函數,不論當前的視窗布局處於所示的那一種模式,這個函數都會將它們順時針旋轉。這樣就不需要使用者自己去小心識別不同的情境,然後再去選擇正確的函數了。這個函數在我的 Emacs 中是綁定在 Ctrl-x 4 C 上的。注意這裡的 C 是大寫,以便與上一個函數相區別。

 

#+BEGIN_EXAMPLE

+--------------------------------+ +----------------+---------------+
| | change-split-type-3 | | |
| a | Ctrl-x 4 C | | a |
| | | | |
+---------------+----------------+ ----------------> +----------------+ |
| | | | | |
| | | | | |
| | | | | |
+---------------+----------------+ +----------------+---------------+
^ |
| change-split-type-3 | change-split-type-3
| Ctrl-x 4 C | Ctrl-x 4 C
| |
| v
+---------------+----------------+ +----------------+---------------+
| | | change-split-type-3 | | |
| a | | Ctrl-x 4 C | | |
| | | | | |
| +----------------+ <---------------- +----------------+---------------+
| | | | |
| | | | a |
| | | | |
+---------------+----------------+ +--------------------------------+


#+END_EXAMPLE

實際上在 Emacs 這裡還有一個好訊息。既然要自己寫函數,我就索性再寫一個,把旋轉緩衝區的問題也一併解決了。所謂旋轉緩衝區就是保持當前視窗模式不變,將三個視窗當中的編輯緩衝區按照順時針的方向,相互調換。 這個函數的名字是 roll-v-3 。在我的 Emacs 當中被綁定在 Ctrl-x 4 r 按鍵組合上。

 

#+BEGIN_EXAMPLE

+--------------------------------+ +--------------------------------+
| | roll-v-3 | |
| A | Ctrl-x 4 r | B |
| | | |
+---------------+----------------+ ----------------> +---------------+----------------|
| | | | | |
| B | C | | C | A |
| | | | | |
+---------------+----------------+ +---------------+----------------+
^ |
| roll-v-3 roll-v-3 |
| Ctrl-x 4 r Ctrl-x 4 r |
| |
| +-------------------------------+ |
| | | |
+------------- | C | <------------+
| |
+---------------+---------------+
| | |
| A | B |
| | |
+---------------+---------------+


#+END_EXAMPLE
tmux 的三視窗旋轉

tmux 對三視窗模式提供了原生支援,所以在 tmux 裡面進行三視窗旋轉是最方便的。但是這種支援也是有限度的,大家可以看到在這裡 tmux 比 Emacs 少了一種布局方式。

註: 下面樣本中的 M 代表 Meta 鍵,對應到現代鍵盤上通常是 ALT 鍵

#+BEGIN_EXAMPLE

+----------------+----------------+
Ctrl-b M-3 | | |
+-------------------------------------- | | b |
| | | |
| +---------------------------------> | a +----------------+
| | Ctrl-b M-4 | | |
| | | | c |
v | | | |
+--------------------------------+ +----------------+----------------+
| | ^ |
| a | | |
| | | |
+---------------+----------------+ Ctrl-b M-4 | | Ctrl-b M-5
| | | | |
| b | c | | |
| | | | v
+---------------+----------------+ +----------------+----------------+
| ^ | | |
| | | a | b |
| | Ctrl-b M-3 | | |
| +---------------------------------- +----------------+----------------+
| | |
+-------------------------------------> | c |
Ctrl-b M-5 | |
+---------------------------------+
#+END_EXAMPLE
 Vim 的三視窗旋轉

Vim 的視窗旋轉在這裡是最複雜的。首先 Vim 也對視窗的旋轉提供了原生的支援。通過原生支援,可以實現各種各樣的旋轉支援,並且所有這些方式都具有濃鬱的 Vim 色彩。

 

對於 Vim 的三視窗旋轉需要分成兩部分來介紹。首先是最簡單的一種方式。這種方式嚴格來說不能稱之為“旋轉”,應該叫“對調”才對,但是因為也是可以在三視窗模式下使用的一種操作,所以在這裡就一併介紹了。

#+BEGIN_EXAMPLE

+--------------------------------+ +----------------+----------------+
| | | | |
| a | Ctrl-w J | b | c |
| | -----------------> | | |
+---------------+----------------+ +----------------+----------------+
| | | <----------------- | |
| b | c | Ctrl-w K | a |
| | | | |
+---------------+----------------+ +---------------------------------+

#+END_EXAMPLE

下面要介紹的就是真正的旋轉了。雖然 Vim 原生提供了豐富的多視窗操作支援,但是其中的有些操作並不是非常直接的。從下面的樣本中就能看到,需要一個中間狀態來過渡,才能夠完成。

 

注1: 在一下樣本中,標有字母 a 的視窗代表當前視窗,也就是游標所在的視窗。

注2:在右下角的旋轉樣本當中,標有字母 b 的視窗代表當前視窗。

#+BEGIN_EXAMPLE

+-----------------+ +-----+-----+-----+ +--------+--------+
| a | Ctrl-w H | | | | Ctrl-w J | b | c |
| | --------------> | | | | --------------> | | |
+--------+--------+ | a | b | c | +--------+--------+
| b | c | <-------------- | | | | <-------------- | a |
| | | Ctrl-w K | | | | Ctrl-w H | |
+--------+--------+ +-----+-----+-----+ +-----------------+



+--------+--------+ +-----------------+ +--------+--------+
| | b | Ctrl-w K | a | Ctrl-w L | b | |
| | | --------------> +-----------------+ -------------> | | |
| a +--------+ | b | +--------+ a |
| | | <-------------- +-----------------+ <------------- | | |
| | c | Ctrl-w H | c | Ctrl-w K | c | |
+--------+--------+ +-----------------+ +--------+--------+
      ^                                                                        |
      |  Ctrl-w H                                                              |  Ctrl-w H
      |                                                                        v
  +-----------------+                                                     +--------+--------+
  |                 |                                                     |        |        |
  |                 |                                                     |        |        |
  +--------+--------+                                                     +--------+--------+
  |        |        |                                                     |                 |
  |        |   a    |                                                     |        b        |
  +--------+--------+                                                     +-----------------+


#+END_EXAMPLE

註: 關於這一季當中提到的所以 Emacs 擴充函數,請訪問 EmacsWiki

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.