分割画面のemacsウィンドウのサイズを変更するにはどうすればよいですか?


172

私はemacsを水平に分割しています-上でPerlコードを編集していて、下がシェルです。デフォルトでは、emacsは2つのウィンドウのサイズを等しくしますが、シェルバッファーを小さくします(おそらく半分のサイズですか?)。どうすればできるのだろうと思っていました。

回答:


294

マウスを使用して、ウィンドウサイズをドラッグできます。

モードライン上の他の点では「アクティブ」ではない場所(バッファー名は安全、または未使用の領域は右側にあります)をクリックすると、上下にドラッグできます。

左右にドラッグするには、2つのモードラインが結合する場所を非常に正確にクリックする必要があります。

C-x -shrink-window-if-larger-than-buffer)はウィンドウをその内容に合わせて縮小します。

C-x +balance-windows)は、ウィンドウを同じ高さと幅にします。

C-x ^enlarge-window)は、高さを1行、または前置引数の値だけ増やします。負の引数はウィンドウを縮小します。たとえばC-- C-1 C-6 C-x ^、16行縮小しC-u - 1 6 C-x ^ます。

(にはデフォルトのバインディングはありませんshrink-window。)

C-x }enlarge-window-horizontally)も同様に、水平方向に行います。
C-x {shrink-window-horizontally)もデフォルトでバインドされます。

これらのコマンドのいずれかをrepeatC-x z開始するために、そしてz継続して繰り返すために)続けると、希望する正確なサイズに簡単に到達できます。

これを特定の値で定期的に実行したい場合は、キーボードマクロを記録して実行するか、次のようなものを使用できます。
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

またはこれ:
(global-set-key (kbd "C-c v") (kbd "C-x o C-x 2 C-x 0 C-u - 1 C-x o"))

これはsmidgen hackyなので、これはより良いでしょう:

(defun halve-other-window-height ()
  "Expand current window to use half of the other window's lines."
  (interactive)
  (enlarge-window (/ (window-height (next-window)) 2)))

(global-set-key (kbd "C-c v") 'halve-other-window-height)

接線的には、winner-modeウィンドウの構成に対する変更を繰り返し「元に戻す」ことができるのも気に入っていますC-c left(変更がウィンドウのサイズ/数/配置、または表示されるバッファーだけかどうか)。C-c right最新の構成に戻ります。グローバルに設定する(winner-mode 1)


3
すごい、まさに私が欲しかったもの!どうもありがとうございます!
スティーブ

1
+1:「元に戻す」勝者モードのヒントをありがとう。ところで、私の場合、バッファ名をクリックすると次のバッファが開きます。ただし、マウスカーソルの形状を見ながらサイズを変更できる場合は簡単に確認できます。
jfs 2012年

34

私はこれらを私の中に入れました.emacs

(global-set-key (kbd "<C-up>") 'shrink-window)
(global-set-key (kbd "<C-down>") 'enlarge-window)
(global-set-key (kbd "<C-left>") 'shrink-window-horizontally)
(global-set-key (kbd "<C-right>") 'enlarge-window-horizontally)

最初の2つは、Mac OSX 10.9.1上のEmacs 24.3.1では機能しません
Oskar Persson

1
@OskarPerssonグローバルショートカットとの競合の可能性があります。それを優先的に見つけるか、コントロールを再マッピングしてcaps lock(my way)にしてください。
ウィルベイビ2014年

私は同じ問題を抱えていて、C左とC右が@Wilbeibiで説明されているように、OS Xのシステム環境設定のMission Controlショートカットと競合していることがわかりました。
Doug Richardson

1
これらのキーは既に定義されています。最初に設定する(global-set-key (kbd "<C-up>") nil)前にキーを設定解除してください。ただし、M-left代わりに使用する方がよいでしょう
Mauricio Cortazar

@MauricioCortazar私は何年もEmacsを使っていません。この答えは今は当てはまらないかもしれません。自由に更新してください。
wilbeibi 2017

13

emacsヘルプドキュメントを使用してみましょう。

C-h a

次に、「拡大」または「ウィンドウ」と入力します

あなたが欲しいものを見つけるでしょう。

楽しい!


C-h利用できない環境で作業している可能性があります。それで?
デレルダレット

1
あなたが結合標準ヘルプマップを上書きさてきた場合、あなたは確かにあなたがそれを上書きさてきたものに注意する必要があります。(これに失敗した場合<f1>は、他の標準ヘルプマップバインディングを試してください。)
phils

6

C-x oサイズを拡大したいウィンドウに。そこから、C-x ^それを拡張します。


3
バインディングが異なる場合(私の場合)、コマンドはenlarge-windowです。追加のヒントは、プレフィックス引数を使用して拡張の量を制御することです。
ジョセフゲイ

驚くばかり!どうもありがとうございました!
Steve

6

C-x ^負の数値引数を取ります。特に、現在カーソルがあるウィンドウを4行縮小したい場合は、を押しC-u -4 C-x ^ます。


2

これはあなたが探している正確な答えではありませんが、の機能を探しているときにこの質問に出くわしたspacemacsので、完全を期すために答えを書きます。

オプションは使用することです<SPC> + w + .(それはバニラspacemacsで動作します)

これにより、一時的なウィンドウが開き[]{}、細かいレベルでサイズを変更できます。

Cxやマウスは必要ありません...

ウィンドウ操作の過渡状態


通常のemacsに似たものがある場合は?
クロコジル

それはおそらくそこにはないでしょう、それがDrewが最初にこの質問をした理由です...
はい、

0

私は同じ質問を受けました。これが私の解決策です。
まず、新しい関数を定義します。

(defun buffer-resize ()
  (delete-other-windows)
  (split-window-vertically (floor (* 0.68 (window-height))))
  (other-window 1)
  (switch-to-buffer buf)
  (other-window 1))

たとえば、バッファでrun-schemeを実行したいので、それを書き換えます。
そしてここに定義があり、関数は以前に定義されています:

(defun run-scheme-here ()
  "Run a new scheme process at the directory of the current buffer.
   If a process is already running, switch to its buffer."
  (interactive)
  (let* ((proc (format "scheme: %s" default-directory))
         (buf (format "*%s*" proc)))
    (unless (comint-check-proc buf)
      (let ((cmd (split-string scheme-program-name)))
        (set-buffer
         (apply 'make-comint-in-buffer proc buf (car cmd) nil (cdr cmd)))
        (inferior-scheme-mode)
        (buffer-resize)))
    (pop-to-buffer buf)))

だから今私が入力すると:Mx run-scheme-here、バッファのサイズが変更されます!
これが私の設定ファイルです。これが役立つことを願っています。https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el


3
あなたのリンクは壊れています:(
CiprianTomoiagă2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.