Edit satu file dalam dua buffer berbeda di emacs

28

Saya ingin membuka file foo.bardua kali (atau lebih) dalam emacs, jadi saya dapat mengedit dua bagian yang berbeda secara bersamaan. Apa itu mungkin? Mungkin pertanyaan yang lebih baik adalah, bagaimana cara melakukannya? Apakah ada cara untuk membuka setiap instance dalam buffer / frame sendiri?

Dror
sumber
Anda dapat menampilkan buffer yang sama di windows yang berbeda. Bukankah ini solusi untuk masalah ini?
Tom

Jawaban:

35

Anda dapat membuka buffer yang sama di lebih dari satu jendela (yang dapat tersebar di antara berbagai bingkai), tetapi itu tidak terlalu nyaman. Setiap jendela memiliki titik sendiri, tetapi mereka semua berbagi tanda, mode file, penyempitan dan karakteristik lainnya, karena terlepas dari titik hampir semua karakteristik terikat dengan buffer. Juga, jika Anda mengunjungi buffer lain di satu jendela, Anda akan kehilangan tempat Anda di file.

Anda dapat membuat buffer tidak langsung yang memiliki titik, tandai, mode, dan sebagainya, tetapi konten yang sama dengan buffer asli (dan menyimpan salah satu buffer menulis ke file yang sama). Untuk membuat buffer kedua yang merupakan klon dari buffer saat ini, jalankan M-x clone-indirect-buffer RET. Untuk membuka buffer kedua di jendela yang berbeda, Anda bisa mengetik C-x 4 c.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3
Untuk memperjelas: C-x 4 cmenjalankan clone-indirect-buffer-other-window, jadi ini akan digunakan alih-alih clone-indirect-buffer, tidak mengikuti perintah itu. Namun, pada sistem saya, kedua perintah ini tampaknya melakukan hal yang sama.
SabreWolfy
Saya berharap saya bisa mencari cara untuk mengingat ini: - /
pedz
@pedz C-x 4adalah awalan untuk windows, cuntuk klon . Anda dapat menentukan binding lainnya jika Anda mau. C-x ctidak digunakan dalam konfigurasi default, Anda dapat menggunakannya jika Anda tidak takut untuk memukul secara tidak sengaja C-x C-c. Saya menetapkan C-x 5 cuntuk mengkloning dalam bingkai baru di file init saya.
Gilles 'SANGAT berhenti menjadi jahat'
8

Mode layar terbagi: di mana ctrl+ xberarti tekan dan tahan tombol ctrl dan ketik x. Kemudian ketikkan nomor berikut.

ctrl+ x2 (pemisahan horizontal)

atau

ctrl+ x3 (pemisahan vertikal)

Kemudian Anda dapat menggulirnya secara independen pada file yang sama atau membuka buffer lain jika Anda menginginkannya.

Untuk kembali ke jenis tampilan tunggal

ctrl+ x1

Jika mau, Anda dapat membagi setiap layar (bagian) sebanyak yang diperlukan. Pilih layar yang ingin Anda bagi terlebih dahulu dan kemudian lakukan pemisahan horizontal atau vertikal.

Matt H
sumber
Astaga! Tidakkah Anda harus memasukkan navigasi keyboard antara frame? C-x oberjalan other-windowdan berputar melalui "jendela" yang terlihat di setiap "bingkai". (Menggunakan konfigurasi emacs di mana window manager windows disebut frame, dan panel terpisah di dalamnya disebut windows (saya tahu, saya tahu, tapi saya tidak bertanggung jawab untuk itu).)
dmckee
Saya cenderung menggunakan mouse.
Matt H
1

Emacs bias ke panel (windows), bukan bingkai. Sering diinginkan untuk membuka buffer yang sama di bingkai lain, bukan hanya jendela lain di bingkai yang sama. Tetapi C-x 5 ctidak terikat secara default. Kode ini mendefinisikan clone-indirect-buffer-other-framefungsi yang hilang :

(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)
                   )
                 )
               )
            )
Andreas Spindler
sumber