2013-05-17 19 views
11

Terminal Emacs(マウスなし)では、複数のバッファを同時に扱うために分割ウィンドウを使用しています。分割されたウィンドウ間の動きがVimでのやり方よりはるかに痛いことが分かりました。私が正しくそれをやっているような文書を読むと(C-x o)、時計回りの方向にウインドウを周回するだけです。隣接するウィンドウに移動してすばやく編集するには、C-x oを数回押してから、元の場所に戻ってください。時々私は間違って何度もそれを急いで押してしまい、再び窓を通って戻ってくる必要があります。Emacsは指定された方向に分割ウィンドウを移動しますか?

まだ別の外付けパッケージをインストールしていないので、ウィンドウに直接移動することもできますし、逆方向にウィンドウを周回することもできます。 VimのC-wのC-W

は、EmacsでC-X Oのようなものですが、...指定された方向にそのような何かを移動するためのC-W ARROWもありますか?

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

あなたはあなたがパッケージを望んでいないと言いましたが、Evilはあなたが知っていると愛しているC-wバインディングを使用しています。 :) –

+0

ありがとう、感謝をインストールしました。これまでのところ、Emacsのコマンドに干渉しないので、これまでのところ楽しんでいます。 – d11wtq

+1

@ChrisBarrett興味深いことに、悪いモードは、 'C-w h/j/k/l'を実装しているようですが、それらの矢印キーの変種はありません。私は自分で簡単に地図を描くことができると思います。 – d11wtq

答えて

17

は、あなたの初期化ファイルにこれを追加します。

(windmove-default-keybindings) 

次に、あなたが指定した方向に隣接する次のウィンドウに移動しSHIFT + 矢印を使用することができます。

必要に応じて、引数を渡して別の修飾子を指定できます(デフォルトは'shift)。

それとも、これらの関数のようなものは何でもバインド:あなたはまた作るために、ミックスにFrameMoveを追加することができます

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

この作業はマルチを透過的に行います複数のフレーム。

番号付きウィンドウのナビゲーションでは、switch-window.elがあります。

+2

OPが明示的にEmacsがターミナルで実行されているので、gnome-terminal&terminatorを含むxtermベースのエミュレータではShift + UPが機能しません。詳細については、[関連する質問](http://stackoverflow.com/questions/10871745/shift-up-arrow-doesnt-highlight-text-emacs-iterm2)を参照してください。 – immerrr

+0

非常に良い点;その場合、彼らはおそらく自分のバインディングを指定する必要があります。 (xtermは拡張キーシーケンスを容易にするターミナルエミュレータの1つですが、あなたが言及した他の2つは実際にそれに基づいているとは思われません:) – phils

+0

さらに、ありがとう:) – d11wtq

1

このようにCu -1 Cx o。この方法で、任意の数のウィンドウを前後に移動できます。個人的には、1つのウィンドウを元に戻すための特別なキーを作成する方が簡単だと思います。私は自分の.emacsでこれを持っている:

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

あなたは oをCxのに接頭引数を与えることができます:私は最初、前、次( O Cxと同じ)に移動し、次の、そして最後のウィンドウを使用:)

+0

ああ、私は、他のウィンドウがそのような議論を受け入れることを、気づかなかった、ありがとう。ニックでシンプルなマッピングでカスタマイズすることができます:) – d11wtq

0

私はelispモジュールを書きましたが、もう少し役に立つようにwindmoveを拡張しました:http://samograd.ca/stumpwm.el。 stumpwm-move-window- [左/右/上/下]を任意のキーにバインドすることができます。ウィンドウは正しい方向に移動し、別の別のフレーム(2フレームでテスト済み)に移動します。また、リターン・アンド・エンド・リサイズのC-n/C-p/C-f/C-bを使用した便利なインタラクティブ・ウィンドウ・リサイズのためのスラムのインタラクティブ・リサイズ・ウィンドウもあります。

+1

リンクが壊れています。 emacs wiki、github、またはそのようなものにこれを置くことができますか? – phils

1

(windmove-default-keybindings) 

はその後に移動し矢印SHIFT + を行いますその方向の窓。

+0

私はこの行を私の.emacsに追加しましたが、それでも期待通りに動かすことはできません。何か問題でも?私のバージョンは24.5です – Wandy

1

あなたの初期化ファイル(例えば~/.emacs)にこれを追加がある

関連する問題