emacsの2つの異なるバッファーで1つのファイルを編集します


28

foo.baremacsでファイルを2回(またはそれ以上)開きたいので、2つの異なる部分を同時に編集できます。出来ますか?おそらくより良い質問は、それを行う方法ですか?各インスタンスを独自のバッファー/フレームで開く方法はありますか?


同じバッファを異なるウィンドウに表示できます。この問題の解決策ではありませんか?
トム

回答:


35

同じバッファを複数のウィンドウで開くことができます(異なるフレームに分散することができます)が、あまり便利ではありません。各ウィンドウには独自のポイントがありますが、ポイント以外はほとんどすべての特性がバッファに関連付けられているため、マーク、ファイルモード、絞り込みなどの特性をすべて共有しています。また、あるウィンドウで別のバッファにアクセスすると、ファイル内の場所が失われます。

独自のポイント、マーク、モードなどを持つが、元のバッファーと同じコンテンツを持つ(およびどちらかのバッファー書き込みを同じファイルに保存する)間接バッファーを作成できます。現在のバッファーのクローンである2番目のバッファーを作成するには、を実行しM-x clone-indirect-buffer RETます。別のウィンドウでその2番目のバッファーを開くには、と入力しC-x 4 cます。


3
明確にするために、runをC-x 4 c実行しますclone-indirect-buffer-other-window。そのためclone-indirect-buffer、コマンドの代わりにの代わりにこれが使用されます。しかし、私のシステムでは、これらのコマンドは両方とも同じことをしているように見えます。
SabreWolfy

私はこれを覚える方法を
見つけ

@pedz C-x 4は、Windowsのプレフィックスでccloneのプレフィックスです。必要に応じて、他のバインディングを定義できます。C-x cデフォルトの設定では使用されていませんが、誤ってヒットC-x C-cすることを恐れない場合は、代わりに使用できます。C-x 5 cinitファイルの新しいフレームにクローンを作成することを定義します。
ジル 'SO-悪であるのをやめる'

8

分割画面モード:ctrl+ xは、Ctrlキーを押しながらxを入力することを意味します。次に、次の番号を入力します。

ctrl+ x2(水平分割)

または

ctrl+ x3(垂直分割)

次に、同じファイルで個別にスクロールしたり、必要に応じて別のバッファを開いたりできます。

単一のビュータイプに戻るには

ctrl+ x1

必要に応じて、各画面(セクション)を必要な回数だけ分割できます。最初に分割する画面を選択してから、その画面で水平または垂直の分割を実行します。


いいね!フレーム間にキーボードナビゲーションを含めるべきではありませんか?各「フレーム」に表示されている「ウィンドウ」をC-x o実行other-windowおよび循環します。(ウィンドウマネージャーウィンドウはフレームと呼ばれ、その中の別のパネルはウィンドウと呼ばれるemacs構成を使用します(私は知っていますが、私は知っていますが、私は責任を負いません)。)
dmckee

私はマウスを使う傾向があります。
マットH

1

Emacsは、フレームではなくペイン(ウィンドウ)に偏っています。同じフレームの別のウィンドウだけでなく、別のフレームで同じバッファを開くことが望ましい場合がよくあります。しかしC-x 5 c、デフォルトではバインドされていません。このコードは、欠落しているclone-indirect-buffer-other-frame機能を定義します。

(global-set-key [?\C-x ?5 ?c]
             '(lambda(newname display-flag)
               "Like `clone-indirect-buffer-other-window' but display in another frame."
               (interactive
                (progn
                  (if (get major-mode 'no-clone-indirect)
                      (error "Cannot indirectly clone a buffer in %s mode" mode-name))
                  (list (if current-prefix-arg
                            (read-buffer "Name of indirect buffer: " (current-buffer))) t)))
               (save-window-excursion
                 (let ((newbuf (clone-indirect-buffer newname display-flag)))
                   (switch-to-buffer-other-frame newbuf)
                   )
                 )
               )
            )
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.