回答:
私は明らかにこれのためにace-windowを好む。表示されているウィンドウとフレームを切り替えることができます。MELPAにあり、すぐにインストールできます。あとは、バインドするだけです。
(global-set-key (kbd "C-x o") 'ace-window)
または、ウィンドウの切り替えは一般的なタスクであるため、短いキーコードを使用することもできます。
(global-set-key (kbd "M-p") 'ace-window)
ace-window
これはのドロップイン代替品ですother-window
。後者とは異なり、ace-window
ウィンドウを選択するために2回以上呼び出す必要はありません。1回の呼び出しで(おそらく複数のフレームにわたって)必要なウィンドウを選択します。
ウィンドウの切り替えに加えて、ace-window
さらに多くのことができます(ウィンドウの削除またはスワップなど)。READMEを参照してください。
ace-window
しswitch-window
て、文字がより発音されることを除いて、ほぼ同じことを行うように見えるものを見ました。私たちは両方のパッケージを持っている面白いようです。
switch-window
に提出ace-window
するまで知りませんでした。
ace-window
、私が推測する他のパッケージよりも多くのカスタマイズがあります。それでも将来の助けになる可能性があるのは、スマートスワップアクションと同様の方法で、そのウィンドウを食い尽くす機能へのキーバインディングです。アップウィンドウ)。この場合、比率は半分、1/4、または3分の1になるように決定する必要があります。
1つの方法はを使用することwindmove
です。デフォルトのキーバインディングを使用すると、現在アクティブなウィンドウの隣のウィンドウに切り替えることができます。
Emacsに組み込まれているため、何もインストールする必要はありません。initファイルで次の最小限の設定でアクティブにします。
(windmove-default-keybindings)
その後、(直感的に使用矢印は、あなたが移動する方向を定義します)次のキーを使用して、隣のウィンドウに切り替えることができます:S-<left>
、S-<right>
、S-<up>
、S-<down>
。
の代わりに別の修飾子を使用shiftする場合は、の引数として指定できますwindmove-default-keybindings
。例えば:
(windmove-default-keybindings 'meta)
または
(windmove-default-keybindings 'control)
詳細については、Emacs Wikiを参照してください。
(windmove-default-keybindings 'meta)
、EmacsWikiで提案されているように、関数が引数として修飾キーを受け入れることを示すために、答えを更新する価値があるでしょう。
Shift-arrow
)が、あなたがたくさんのスプリットを持つ大きなモニターを持っているとき、そのような動きはすぐに扱いにくくなります。何らかの方法でウィンドウ/分割を列挙する方がより興味深いでしょう。に似てace-window
いますが、キーを押す回数が少なく、必要な数をすぐに把握するための明らかなアルゴリズムがあります。
入力しother-window
やすいキーシーケンスにバインドできます。
たとえば、にC-.
バインドしother-window
、C-,
前のウィンドウに移動するようにバインドしています。
(global-set-key (kbd "C-.") #'other-window)
(global-set-key (kbd "C-,") #'prev-window)
(defun prev-window ()
(interactive)
(other-window -1))
これは、複数のウィンドウを移動する場合に特に便利です。Controlキーを押したままにすると、ボタンを1つ押すだけで次のウィンドウに移動できます。これは、1回の移動で3回押すよりもはるかに簡単です。
C-x o
for other-window
は、「最悪のデフォルトemacsショートカット」のタイトルに対する数少ない堅実な候補の1つです。私の解決策(zckに似ています)はother window
、(方法)簡単なキーシーケンスに再バインドすることでした-私はそれをバインドしていますC-;
(そして私のものCaps-Lock
と交換されるCtrl
ので、必要なのは小指をすばやくタップするだけです)。ところで、私はhelm
andの特定の機能に完全に依存していますicicles
(つまり、「アンチパッケージ」などではありません)。ここでは、単純な解決策が最適に機能すると思います。
M-o
しother-window
ます。いくつかのモードがすでに持っているM-o
結合、とりわけdiff-mode
、ggtag-mode
とibuffer-mode
。各モードマップで手動でバインドを解除する必要があります。unbind-key
によって提供されるbind-key.el
は非常に便利です。
M-o
だけでなく、としているM-O
にバインドされたace-window
私は、追加の電力を必要とするときのために。
window-numbering.el!
ホットキー "、1"、 "、2"、 "、3"を割り当てて特定のウィンドウを切り替えます(悪モードを使用していることに注意してください)
さらに、モードラインに下線付きのピンク色でウィンドウ番号を表示します。
これは決して無視できない視覚的なヒントですが、
これがウィンドウを切り替える最も簡単な方法です。
https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-evil.elおよびhttps://github.com/redguardtoo/emacs.d/blob/master/lisp/init-modelineを確認してください私の設定では.el。
Sylvain Bennerはspacemacsで私の考えを採用しましたが、キーバインドは異なります。したがって、spacemacsを使用すると、すぐに使用できる最速のソリューションが得られます。
window-number
してM-<num>
、b / wウィンドウをすばやく切り替えます。これと似た概念
追加のアドオンを使用C-x o
せずに、オプションのプレフィックスを使用して、その数のウィンドウをスキップできます。たとえばC-u 1 C-x o
、次のウィンドウ(つまり、plainで取得するものC-x o
)にC-u 2 C-x o
移動し、2ウィンドウ上にC-u 3 C-x o
移動し、3ウィンドウ上に移動します。
other-window
docstring からの抜粋(以下によって呼び出される関数C-x o
:
COUNTは、選択する前に、選択したウィンドウからスキップするウィンドウの数を指定します。COUNTが正の場合、COUNTウィンドウを前方にスキップします。COUNTが負の場合、-COUNTウィンドウを後方にスキップします。COUNTゼロは、ウィンドウをスキップしないことを意味するため、選択したウィンドウを選択します。対話式呼び出しでは、COUNTは数値のプレフィックス引数です。nilを返します。
一部の人々は、エディターブリーフを覚えているかもしれません(おもしろいことにUnderwareと呼ばれる会社によって作成されました)。
目に見えるウィンドウを切り替えるきちんとした方法がありました。M-arrowは、矢印キーの方向に合わせてカーソルを直接ウィンドウに移動します。
だから、私はマッピングされwinmove-left
、winmove-right
、winmove-up
とwinmove-down
に機能をM-left
、M-right
、M-up
とM-down
私の.emacsファイルに次のようにキーを-
(global-set-key [M-left] 'windmove-left) ; move to left window
(global-set-key [M-right] 'windmove-right) ; move to right window
(global-set-key [M-up] 'windmove-up) ; move to upper window
(global-set-key [M-down] 'windmove-down) ; move to lower window
これで、構成がどれほど雑然としているかに関係なく、ウィンドウ間を簡単に移動できるようになりました。そして、最近ではディスプレイのサイズが非常に雑然としています...
(windmove-default-keybindings 'meta)
!
あなたが使用している場合はつららをその後、C-x o
あなたがして、Windowsを選択することができます名前(またはサイクルによって)。
接頭辞arg C-x o
がother-window
ない場合は、フレームにウィンドウが1つしかない場合を除き、通常と同じですother-frame
。
前置引数では、C-x o
あるマルチコマンド名前でウィンドウやフレーム間(またはサイクルによって)を移動できます。ウィンドウ間を移動するには、マルチコマンドを使用し icicle-select-window
ます。フレーム間を移動するために使用しicicle-select-frame
ます。
使用されるナビゲーションは、接頭辞argに依存します。
接頭辞ゼロ引数(例C-0
):選択したフレームに複数のウィンドウがある場合、これは
icicle-select-window
、候補と同じフレームにあるウィンドウで、です。それ以外の場合(単一ウィンドウフレーム)、これはicicle-select-frame
です。
C-u
:選択したフレームに複数のウィンドウがある場合、これは
icicle-select-window
、すべての可視フレームのウィンドウを候補として、です。それ以外の場合、これはicicle-select-frame
です。
C-u C-u
:すべてのフレームのicicle-select-window
ウィンドウを候補として(アイコン化されたフレームまたは非表示のフレームを含む)。
Iciclesの場合と同様に、(a)補完、テキストを入力して一致する候補(この場合はウィンドウ名またはフレーム名)のセットを絞り込み、(b)(一致する候補間で)サイクリングを組み合わせることができます。
ウィンドウ間をすばやくジャンプするには、キーコードの使用を検討してください。モディファイヤキーに手を伸ばすよりもはるかに高速です(手にも負担がかかりません)。
私が使用するパッケージの選択はace-window
、複数のウィンドウを簡単にナビゲートできるようにすることですother-window
。
(require 'key-chord)
(key-chord-define-global "xo" 'ace-window)
(key-chord-mode +1)
明らかにこれを使用するには、が必要でkey-chord
ありace-window
、どちらもmelpaで利用可能です。
ace-window
@ abo-aboの答えのように仕事をしているので、私は質問を提起しました。この文脈では、使用する特定のキーバインドは、答えではなくコメントとしてより意味があると思います。ちょうど私の2セント。
key-chord
非常にアクセスしやすいキーの組み合わせをバインドできます。のバインド例 xo
は、C-x o
(1対2の深さ)より高速です。この答えは、答えが関数選択に関する他の答えと直交していることを強調するために言い換えることができます(そしてace-window
、説明された方法でバインドできる多くの選択肢の1つにすぎません)。この答えは明確にしてください!
ここでいくつかの良い答えは、私はWinMoveのファンでもありますが、org-modeはM-を使用して見出しを操作するため、それをC-にバインドします
(define-key global-map (kbd "C-<up>") 'windmove-up)
(define-key global-map (kbd "C-<down>") 'windmove-down)
(define-key global-map (kbd "C-<left>") 'windmove-left)
(define-key global-map (kbd "C-<right>") 'windmove-right)
本当によくなるのは、Hydraと組み合わせる場合です。Wikiの例に従って、私は自分のモンスターを作成しました。
(defhydra hydra-windows ()
"C-arrow = switch, S-arrow = size, M-arrow = move"
("C-<left>" windmove-left nil)
("C-<right>" windmove-right nil)
("C-<up>" windmove-up nil)
("C-<down>" windmove-down nil)
("S-<left>" hydra-move-splitter-left nil)
("S-<right>" hydra-move-splitter-right nil)
("S-<up>" hydra-move-splitter-up nil)
("S-<down>" hydra-move-splitter-down nil)
("M-<left>" buf-move-left nil)
("M-<right>" buf-move-right nil)
("M-<up>" buf-move-up nil)
("M-<down>" buf-move-down nil)
("p" previous-buffer "prev-buf")
("n" next-buffer "next-buf")
("1" delete-other-windows "1")
("d" delete-window "del")
("k" kill-buffer "kill")
("s" save-buffer "save")
("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo")
("r" winner-redo "redo")
("b" helm-mini "helm-mini" :exit t)
("f" helm-find-files "helm-find" :exit t)
("|" (lambda () (interactive) (split-window-right) (windmove-right)))
("_" (lambda () (interactive) (split-window-below) (windmove-down)))
("q" nil "cancel")
)
(global-set-key (kbd "M-#") 'hydra-windows/body)
これにより、ウィンドウの変更、サイズ変更、ウィンドウからウィンドウへのバッファーの移動、バッファーの循環、バッファーの削除、さらには勝者モードによるウィンドウ構成の取り消しが可能になり、ヘルムも統合されます。ヒドラを終了するには、矢印またはヒドラにない他のキーを押すだけです。hydraの例には「hydra-move」機能があります。hydraの素晴らしいところは、すべてのキーバインドと「modeful」を覚える必要がないため、hydraにアクセスすると、すべてが単一のキーとして利用できることです。押す。
(windmove-default-keybindings 'control)
です。
いつものように、これを達成するための100の異なる方法があります。私の好ましい方法は、NumberedWindowsを使用することです。次に、スーパーとキー1〜9を使用して次のキーバインドを設定します。
(global-set-key (kbd "s-1") (lambda() (interactive) (window-number-select 1)))
この正確なテーマについては、Afternoon Coderで読むことができる最近の私の投稿でもう少し詳しく説明します。