2013-05-17 69 views
11

在Terminal Emacs(無鼠標)中,我使用拆分窗口同時處理多個緩衝區。我發現在拆分窗口之間移動比在Vim中做的更麻煩。閱讀文檔,它看起來像我做的正確(C-x o),但它只是在順時針方向圍繞窗口循環。如果我移動到相鄰的窗口進行快速編輯,在我回到原來的位置之前,我需要點擊幾次纔會彈出C-x o。有時候我不小心匆匆推了很多次,不得不一次又一次地通過窗戶循環。Emacs在指定方向上移動分割窗口?

除了安裝另外一個外部軟件包,有沒有什麼辦法可以直接移動到窗口(通過一個數字),或者至少在窗口周圍反向旋轉?

在Vim中C-W C-W就像C-×○在Emacs,但也有C-w^ARROW到指定方向移動......類似的東西? :)

+1

我知道你說你不想要軟件包,但Evil使用你知道和喜歡的C-W綁定。 :) –

+0

安裝了邪惡,謝謝。到目前爲止,我很享受它,因爲它不會像我認爲的那樣干擾Emacs命令。 – d11wtq

+1

@ChrisBarrett有趣的是,邪惡模式似乎實現了'C-w h/j/k/l',但不是那些箭頭鍵變體。我想我可以很容易地自己映射它們。 – d11wtq

回答

17

添加到您的init文件:

(windmove-default-keybindings) 

然後你可以使用SHIFT + 箭頭移動到下一個相鄰的窗口中指定的方向。

如果您願意,可以通過傳遞參數指定其他修飾符(默認爲'shift)。

或者只是綁定任何你喜歡這些功能:

  • windmove-up
  • windmove-down
  • windmove-left
  • windmove-right

您還可以添加FrameMove進來,使這項工作透明地跨越多個iple框架。

對於已編號的窗口導航,有switch-window.el

+2

由於OP明確指出Emacs在終端中運行,所以值得注意的是'Shift + UP'在基於xterm的模擬器(包括gnome-terminal&terminator)中不起作用。請參閱[相關問題](http://stackoverflow.com/questions/10871745/shift-up-arrow-doesnt-highlight-text-emacs-iterm2)以獲取更多信息。 – immerrr

+0

非常好的一點;在這種情況下,他們可能需要指定他們自己的綁定。 (儘管xterm是其中一個終端模擬器*,它*也*便於擴展密鑰序列,並且我不認爲你提到的其他兩個實際上是基於它的:) – phils

+0

更好,謝謝:) – d11wtq

1

我用下面的導航到下一個(同CXØ),上一張,第一和最後一個窗口:

(defun my-previous-window() 
    "Previous window" 
    (interactive) 
    (other-window -1)) 
(global-set-key "\C-xp" 'my-previous-window) 

(global-set-key "\C-xn" 'other-window) 

(defun my-select-first-window() 
    (interactive) 
    (select-window (frame-first-window))) 

(defun my-select-last-window() 
    (interactive) 
    (select-window (previous-window (frame-first-window)))) 

(global-set-key "\C-x<" 'my-select-first-window) 
(global-set-key "\C-x>" 'my-select-last-window) 
2

你可以給一個前綴參數CXØ像這樣Cu -1 Cx o。這樣你可以前進或後退任意數量的窗口。就我個人而言,我認爲創建一個移回一個窗口的特殊鍵更容易。我有這個在我的.emacs:

(defun other-window-backward() 
    "Goto previous window" 
    (interactive) 
    (other-window -1)) 
(global-set-key (kbd "\C-x p") 'other-window-backward) 
+0

啊,我沒有意識到'other-window'接受這樣的觀點,謝謝。使用映射然後自定義好:) – d11wtq

0

我寫了一個elisp模塊,回來擴展windmove使它更有用:http://samograd.ca/stumpwm.el。你可以將stumpwm-move-window- [left/right/up/down]綁定到你想要的任何鍵上,並且窗口將以正確的方向移動,甚至插入另一個框架(用2幀測試)。還有一個用於交互式窗口大小調整的stumpwm-interactive-resize窗口,使用C-n/C-p/C-f/C-b進行調整,並返回到結束大小調整。

+1

鏈接已損壞。你可以把它放在emacs wiki或者github上嗎? – phils

1

添加到您的init文件(如~/.emacs):

(windmove-default-keybindings) 

然後做SHIFT + 箭頭移到在那個方向上的窗口。