Emacs、前のウィンドウに切り替え


93

EmacsではC-x o、次のウィンドウに移動します。

Emacsの前のウィンドウに移動するためのキーボードマクロは何ですか?

回答:


88

それは C-- C-x o

つまり、C-x o-1の引数を使用します。のようにC-u、とコマンドの間に数値引数を挿入することにより、移動するウィンドウの数を指定できますC-u 2 C-x o。(C--はのショートカットですC-u - 1


また、を使用C-x zして最後のコマンドを繰り返し、ウィンドウをすばやく切り替えることができます。
Ivan Huang

105

ジオメトリに基づいて選択したウィンドウに移動できるwindmoveを使用してみることもできます。Cxの矢印キーを使用してウィンドウを変更するには、.emacsファイルに次のように記述します。

(global-set-key (kbd "C-x <up>") 'windmove-up)
(global-set-key (kbd "C-x <down>") 'windmove-down)
(global-set-key (kbd "C-x <right>") 'windmove-right)
(global-set-key (kbd "C-x <left>") 'windmove-left)

11
呼び出すことを注意(windmove-default-keybindings)私はあなたよりも便利だと思うこれは、+アップ/ダウン/右/左SHIFTに、これらの機能が結合するC-xためにも、便利なデフォルトのバインディングとその葛藤(バインディングprevious-buffernext-buffer。:lkahtz (kbd)関数は、文字列表記でキーを指定することができますバインディングを使用C-h kまたはC-h c記述するときにEmacsでも使用される、より読みやすい構文
phils

4
矢印キーの使用は承認しません。しかし、私はとにかく有用性に賛成しました。:smug:
ビョルン

2
@phils SHIFT + <keys>は、Emacs 23(shift-selection-mode)からデフォルトで有効になっているシフト選択と干渉します。
legends2k 14

2
legends2k:真; に引数を渡しwindmove-default-keybindingsて、矢印キーと組み合わせて使用​​する別の修飾子を指定することもできます。そのため、その機能はシフト選択モードを使用する人々にとって依然として便利です。
phils 2014

1
@phils同意する、メタは良い代替手段のようです。Emacs Wikiに見られるように
legends2k 2017年

30

個人的に私は使いたい window-number.el

別のウィンドウを選択するには、Ctrl- xCtrl- nを使用しますj

ここで、Nは、スクリーンショットに示すように、ウィンドウの数、各ウィンドウが表示それの数のモードラインです。

window-number.elをダウンロードし、emacs load-pathに配置して、以下で使用してください.emacs

 (autoload 'window-number-mode "window-number"
   "A global minor mode that enables selection of windows according to
 numbers with the C-x C-j prefix.  Another mode,
 `window-number-meta-mode' enables the use of the M- prefix."
   t)

switch-window.elウィンドウに大きな数字を表示する、別の同様のモードが呼び出されます...(数字を押すとウィンドウが切り替わり、表示が元に戻ります)。


(ソース:tapoueh.org


2
いいですが、に何かをC-x C-jバインドしdired-jumpないことをお勧めします(require 'dired-x)。(M-x customize-group RET dired-keys RETそれをオーバーライドするかどうかを確認してください。)
phils

1
これを投稿した後、私は試しswitch-window.elてみることにしました。C-x o代わりにそれを使用し、アクティブなウィンドウが2つしかない場合は、他のウィンドウを選択するだけです。再バインドC-x oしてwindow-numberトリックを実行するのが最も賢明だと思いますdired-jump。個人的にはウィンドウの切り替えを減らしてC-x b自分自身を使用していますが、拡張機能を使用することC-x oは非常に楽しいことです。
ocodo

最初のスクリーンショットで驚くべきEmacsテーマ。どうすれば入手できますか?
semente 2012

Emacs関連ページの@sementejasonm23.github.com
EmacsFodder/

1
@petrux emacsfodder.github.io/blog/two-new-emacs24-themesこれはおそらく2つのテーマのうちの1つだと思います。-ところで クールなモードラインについては、gist.github.com
jasonm23 / 8554119を

13

複数のemacsウィンドウ(> 3)を頻繁に使用していて、いくつかのキーストロークを保存したい場合は、これをinitファイルに追加してください。

(defun frame-bck()
  (interactive)
  (other-window-or-frame -1)
)
(define-key (current-global-map) (kbd "M-o") 'other-window-or-frame)
(define-key (current-global-map) (kbd "M-O") 'frame-bck)

Moを使用して窓をすばやく循環します


1
これはまさに私が必要としたソリューションです。私が欲しかったのは、ウィンドウ切り替えコマンドが単一の繰り返しキーストロークであることだけでした。ありがとう!それを機能させるために、other-window-or-frameをother-windowに変更する必要がありました。私はEmacs 24.2.1を使用しています。
Geoff 2013年

これらは非常に良いバインディングだと思います(特に、ウィンドウが2つ以上ある場合)。言っother-windowたようにそれを動作させるために変更することも帽子です。
dolzenko 2014

11

ここにはいくつかの非常に良い完全な答えがありますが、質問に最小限の方法で答えるには:

 (defun prev-window ()
   (interactive)
   (other-window -1))

 (define-key global-map (kbd "C-x p") 'prev-window)

2
とき以来、私は知りませんが、Emacsは、今しているprevious-windowに建てられた。
アルネ

@Arneこれは呼び出し可能な関数ではM-xないので、別の目的に役立つはずです。
Ivan Huang

4

@Nateのアイデアに基づいていますが、ウィンドウ間の後方循環をサポートするために少し変更されています

;; Windows Cycling
(defun windmove-up-cycle()
  (interactive)
  (condition-case nil (windmove-up)
    (error (condition-case nil (windmove-down)
         (error (condition-case nil (windmove-right) (error (condition-case nil (windmove-left) (error (windmove-up))))))))))

(defun windmove-down-cycle()
  (interactive)
  (condition-case nil (windmove-down)
    (error (condition-case nil (windmove-up)
         (error (condition-case nil (windmove-left) (error (condition-case nil (windmove-right) (error (windmove-down))))))))))

(defun windmove-right-cycle()
  (interactive)
  (condition-case nil (windmove-right)
    (error (condition-case nil (windmove-left)
         (error (condition-case nil (windmove-up) (error (condition-case nil (windmove-down) (error (windmove-right))))))))))

(defun windmove-left-cycle()
  (interactive)
  (condition-case nil (windmove-left)
    (error (condition-case nil (windmove-right)
         (error (condition-case nil (windmove-down) (error (condition-case nil (windmove-up) (error (windmove-left))))))))))

(global-set-key (kbd "C-x <up>") 'windmove-up-cycle)
(global-set-key (kbd "C-x <down>") 'windmove-down-cycle)
(global-set-key (kbd "C-x <right>") 'windmove-right-cycle)
(global-set-key (kbd "C-x <left>") 'windmove-left-cycle)

4

@ Nate、@ aspirin、@ Troydmの答えに追加するだけで、選択したキーの組み合わせにwindmoveコマンドをバインドする場合、これは非常に役立つ追加であることがわかります。

(setq windmove-wrap-around t)

デフォルトの設定では、存在しないウィンドウに移動しようとするとエラーが発生し、しばらくすると煩わしくなります。ただし、windmove-wrap-aroundが設定されている場合、たとえばフレームの下部から移動しようとすると、代わりにフレームの一番上のウィンドウが選択されます。これはあなたにとってより直感的な振る舞いかもしれません。


4

M-nそしてM-p、彼らはに類似しているので、私にはほとんど意味がありますC-n次の行)とC-p前のライン):

(define-key global-map (kbd "M-p") 'previous-multiframe-window)
(define-key global-map (kbd "M-n") 'other-window)

(に触発され、この及びその


私は賛成してこの設定を使用しました。問題はM-n、これM-pはすでにターミナル(gdb、python、ielmなど)で使用されているため、ターミナルバッファーからジャンプするには、別のメソッドに切り替える必要があります。
mihai 2015年

それらはそれらの環境で何に使用されますか?
tshepang 2015年

それは今のところ私が見た中で最高のものです、それは他のものに対抗せず、魅力のように機能します!ありがとう!
aurelien 2017年

2

ネイトの答えを参照するには、私は置き換えarrow keys伝統を使用するためにp行くためにupn行くためにdownf行くためrightb行くためleft。私も交換CtrlSuperて、キーC-p, C-n, C-f and C-bのデフォルト移動キーです。この組み合わせMにより、キーストロークごとに1つずつ処理するのではなく、文字と行をジャンプできます。したがって、Superキーは簡単なキーバインドを維持するための最良の選択であると感じました。また、ホームローから手を離す必要がなくなりました!

(global-set-key (kbd "s-p") `windmove-up)
(global-set-key (kbd "s-n") `windmove-down)
(global-set-key (kbd "s-f") `windmove-right)
(global-set-key (kbd "s-b") `windmove-left)

それが役に立てば幸い!


2
(global-unset-key (kbd "M-j"))
(global-unset-key (kbd "M-k"))
(global-set-key (kbd "M-j") (lambda () (interactive) (other-window 1)))
(global-set-key (kbd "M-k") (lambda () (interactive) (other-window -1)))

altjそしてaltkあなたの目に見えるバッファを循環します。正確には、前方と後方。


Mkはちょっと便利なショートカットです。他の選択肢はありますか?
A_P 2016年


0
(global-set-key (kbd "C-x a") 'ace-swap-window)  
(global-set-key (kbd "C-x q") 'ace-select-window)

download ace-window from the melpa repo if you don't know how to do that
put this in your .emacs file if you don't have one create it 

(package-initialize)                                                                                                                                                                     

(require 'package)                                                                                                                                                                       
(add-to-list 'package-archives '("melpa" , "http://melpa.org/packages/"))                                                                                                                

(package-initialize) 

then "m-x list-packages"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.