web-dev-qa-db-ja.com

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

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

28
Dror

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

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

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

ctrl+x 2(水平分割)

または

ctrl+x 3(垂直分割)

次に、それらを同じファイル上で個別にスクロールするか、必要に応じて別のバッファーを開くことができます。

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

ctrl+x 1

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

8
Matt H

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