Mengapa menggunakan buffer tidak langsung?

Jawaban:

16

Untuk melihat dan mengedit beberapa lokasi buffer yang sama. Jadi, Anda tidak harus menggulir buffer panjang tetapi cukup beralih jendela ke wilayah yang terlihat. Setiap buffer kloning juga memiliki ring mark yang berbeda, penyempitan dan properti buffer lainnya. Jika Anda tidak menggunakan buffer tidak langsung tetapi membuat jendela lain dari buffer yang sama, maka semuanya dibagikan dan Anda tidak dapat melakukan fitur lanjutan lainnya selain melihat dan mengedit lokasi yang berbeda. Misalnya, dengan buffer tidak langsung, Anda dapat melipat semua blok kode, secara efektif membuat "tag tree" tanpa memengaruhi buffer asli. Menggunakan jendela, kedua buffer di kedua jendela dilipat karena kedua buffer itu sama.

Singkatnya, buffer tidak langsung adalah buffer yang sama sekali berbeda yang terjadi untuk berbagi teks dan file yang sama di buffer asli Anda, jadi ketika Anda menyimpan buffer yang dikloning, itu juga menyimpan file asli Anda.

Tu Do
sumber
3
Saya setuju bahwa buffer tidak langsung memiliki manfaat. Tetapi poin pertama Anda tidak perlu buffer tidak langsung. Anda dapat melihat dan mengedit beberapa lokasi buffer yang sama walaupun buffer yang sama dibuka di dua jendela. Tapi ya, penyempitan independen, lipat, dll adalah fitur kuat dari buffer tidak langsung menurut saya.
Kaushal Modi
5
Juga edit buffer yang sama dengan beberapa mode, (gabungkan buffer tidak langsung dengan penyempitan). Anda dapat mengedit beberapa bagian dari buffer dengan mode penurunan harga, bagian lain dengan mode python, bagian lain dengan mode json
freakhill
Anda dapat melihat beberapa lokasi menggunakan beberapa jendela saja, tetapi karena hanya ada satu nilai titik dalam situasi ini, beralih buffer tidak akan mempertahankan lokasi di kedua jendela, tetapi hanya satu.
politza
9

Satu use case menggunakan mode utama yang berbeda pada satu bagian file.

Misalnya saya pernah bekerja dengan dokumen xml dengan kode di dalam elemen-elemen tertentu. Saya ingin dapat mengedit seluruh dokumen seolah-olah itu xml, tetapi masih memiliki semua fitur mode utama untuk bahasa pemrograman yang tertanam dalam elemen-elemen tertentu, jadi saya mempersempit ke tubuh elemen-elemen itu dalam buffer tidak langsung yang menjalankan mode utama yang sesuai.

Ini adalah fungsi dari konfigurasi saya yang saya gunakan untuk melakukan ini:

(defun indirect-region (start end)
  "Edit the current region in another indirect buffer.
    Prompt for a major mode to activate."
  (interactive "r")
  (let ((buffer-name (generate-new-buffer-name "*indirect*"))
        (mode (intern
               (completing-read
                "Mode: "
                (mapcar (lambda (e)
                          (list (symbol-name e)))
                        (apropos-internal "-mode$" 'commandp))
                nil t))))
    (pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
    (funcall mode)
    (narrow-to-region start end)
    (goto-char (point-min))
    (shrink-window-if-larger-than-buffer)))

Catatan: ini tidak sempurna, hal-hal seperti font-lock membutuhkan pekerjaan tambahan khusus untuk digunakan dalam skenario ini.

Jordon Biondo
sumber
3

Buffer tidak langsung memberi Anda banyak tampilan buffer yang sama, khususnya, beberapa penyempitan, yang masing-masing bertindak, dalam banyak hal, seperti buffer terpisah.

Seperti yang dikatakan oleh Commentary for library narrow-indirect.el:

Anda dapat menggunakan buffer tidak langsung lebih dari yang Anda kira. Anda dapat menggunakan klon yang diambil dari bagian buffer Dired, misalnya, untuk memberi Anda pandangan (aktif) yang berguna ke dalam daftar direktori. Hanya ada beberapa tombol / perintah (seperti gmemperbarui daftar) yang tidak berfungsi, karena mereka bergantung pada tampilan seluruh buffer Dired. Lakukan percobaan, dan Anda pasti akan menemukan kegunaan baru yang menarik untuk buffer tidak langsung.

Drew
sumber