Menyorot teks di buffer / jendela terbuka (ditampilkan) - mencari teks dari satu buffer di buffer lain

8

Saat ini, saya memiliki bingkai Emacs saya terbelah secara vertikal, dan saya melihat dua buffer berbeda di dua jendela.

Saya ingin pergi ke sebuah kata dalam satu buffer, menekan beberapa tombol, dan memiliki ocurrences kata itu (jika ada) disorot di buffer lain , gulir ke sana jika perlu.

Apakah ada cara untuk melakukan itu?

Tangkapan layar untuk dijelaskan

Pada tangkapan layar di atas, dengan kursor saya tepat sebelum "bar" di buffer kiri, saya ingin dapat <melakukan sesuatu> dan dengan cepat melihat di mana "bar" berada di buffer kanan.


Catatan: Ini terkait dengan Bagaimana cara menemukan teks di beberapa buffer terbuka? dalam arti bahwa, jika saya bisa melakukan pencarian di buffer "lain", itu akan melakukan apa yang saya inginkan. Tapi tidak ada jawaban yang tepat seperti yang saya inginkan:

  • The occursolusi berbasis membuka jendela baru yang menunjukkan pencocokan garis, sementara aku ingin tetap saya dua jendela masih ditampilkan - aku benar-benar akan melihat di buffer lainnya untuk konteks di sekitar pertandingan, sehingga hanya menampilkan garis pencocokan sangat tidak membantu.
  • multi-isearch-buffersmengharuskan saya menentukan daftar buffer setiap kali saya ingin melakukan pencarian ini (sering kali), alih-alih secara otomatis mengambilnya sebagai dua buffer yang ditampilkan. Lebih penting lagi, ketika saya mulai dari satu jendela dan melakukan pencarian, ketika menemukan kecocokan di buffer lain ia menampilkan buffer itu di jendela ini, sehingga kedua jendela menampilkan buffer yang sama (lainnya). Kemudian Cg mengembalikan semuanya, dan saya tidak bisa lagi melihat kata yang disorot di buffer lain.
  • icicle-search memiliki begitu banyak fitur yang salah satunya mungkin dapat melakukan ini, tetapi saya tidak dapat menemukan apa pun setelah melihat sekilas pada dokumentasi.
ShreevatsaR
sumber
Saat ini, yang saya lakukan adalah Cs Cw Cs (untuk melakukan pencarian di buffer ini), beralih ke buffer lain, lakukan Cs Cs (untuk mengulangi pencarian yang sama di sana), lalu beralih kembali. Itu tujuh penekanan tombol, yang saya bisa rekam sebagai makro saya kira. Biarkan saya melakukan itu. Meski begitu, saya tertarik untuk mengetahui apakah ada solusi lain.
ShreevatsaR
FWIW: C-s C-w C-x o C-s C-stidak terdengar buruk bagi saya. (Anda tidak perlu C-shak setelah C-w.)
Drew
@Rew: Terima kasih, ide menggunakan makro hanya muncul setelah saya memposting pertanyaan; sekarang makro yang C-s C-w C-x o C-s C-s C-x omemang tampak baik-baik saja.
ShreevatsaR

Jawaban:

5

Anda dapat menggunakan paket yang disebut highlight-globalyang tersedia dari github tetapi tidak pada Melpa (saat menulis ini).

The highlight-frame-togglefungsi yang didefinisikan di pacakge ini akan menyoroti kata pada titik atau wilayah yang dipilih mana-mana di frame (di semua buffer). Ini, meskipun, tidak akan melakukan autoscroll ke kata yang disorot yang Anda butuhkan. Ini memilih warna penyorotan yang berbeda saat Anda menyorot lebih banyak kata tanpa membersihkan cahaya malam sebelumnya.

Berikut ini screenshot dari tampilannya:

masukkan deskripsi gambar di sini Klik untuk melihat tangkapan layar yang lebih baik

Kaushal Modi
sumber
0

helm memiliki antarmuka yang dapat mencapai tujuan ini, saya telah merekam Gifcast untuk menunjukkan paket helm-swoop :

Setelah memulai helm-swooppencarian, saya dapat mempersempit kandidat menjadi lebih sedikit dengan memasukkan token yang dipisahkan ruang lebih lanjut atau menekan C-pdan C-nuntuk beralih ke yang berikutnya dan gulir di buffer target pada waktu yang sama.

wasamasa
sumber
Seperti yang saya katakan dalam pertanyaan, solusi berbasis-kejadian bukanlah yang saya inginkan, karena mereka mencantumkan baris yang cocok (dan saya harus lebih lanjut pergi ke sana dan berinteraksi dengan daftar) alih-alih menjaga buffer lain tetap utuh dan menyorot teks di dalamnya .
ShreevatsaR
Hmm, buffer lain tetap utuh dan bisa menunjukkan konteks kepada Anda, tetapi jika highlight adalah apa yang Anda cari, swoop mungkin lebih cocok untuk Anda.
wasamasa
OK, edit untuk menunjukkan helm-swoop.
wasamasa
Saya berharap saya bisa membuat diri saya lebih jelas. Selama seluruh proses, saya tidak ingin jendela lain untuk pernah tampilan apa pun apa itu saat ini menampilkan. Yang saya inginkan adalah menekan tombol dan melihat di jendela lain, seperti, (pertama, katakanlah) terjadinya kata saat ini di buffer lain. (Dalam tangkapan layar saya, ketika kursor saya berada di "bar" di buffer kiri, saya ingin menekan tombol dan dapat melihat di mana "bar" terjadi di buffer kanan, dengan kanan masih ditampilkan sama.) Setara dengan Memukul C-s C-w C-x o C-s C-s C-x o(itulah yang saya gunakan sekarang, dan tampaknya baik-baik saja sebenarnya).
ShreevatsaR
Jika helm bisa menyorot semua kejadian di buffer lain (saat masih bergulir sehingga yang pertama terlihat di layar), maka itu akan membuatnya lebih baik daripada makro yang terikat pada urutan 8 penekanan tombol itu. :-)
ShreevatsaR
0

Bagaimana kalau menggunakan highlight-regexpuntuk menyorot simbol saat ini (atau kata, wilayah, dll) di jendela lain?

Berikut beberapa fungsi yang bisa berfungsi. Yang pertama akan menemukan simbol di titik, lalu melompat ke jendela lain dan sorot. Yang kedua melompat ke jendela lain dan menghapus highlight.

 (require 'thingatpt)

 (defun highlight-other-window ()
   (interactive)
   (let ((match (thing-at-point 'symbol t)))
     (when match
       (save-excursion
         (other-window 1)
         (highlight-regexp (regexp-quote match))
         (other-window 1)))))

 (defun unhighlight-other-window ()
   (interactive)
   (save-excursion
     (other-window 1)
     (unhighlight-regexp t) 
     (other-window 1)))

Dalam kedua kasus ini melompat kembali sehingga jendela saat ini tetap aktif di akhir. Tidak yakin apakah itu yang Anda inginkan, jika tidak tinggalkan other-windowpanggilan terakhir .

Fungsi-fungsi ini juga dapat ditingkatkan dengan memeriksa dan mencocokkan wilayah aktif; menangani kasus di mana tidak ada jendela lain yang terlihat; dll.

glukas
sumber
The highlight-frame-toggleperintah yang disebutkan dalam jawaban lain tampaknya menjadi versi yang lebih dipoles ini, jadi saya kira Anda tidak perlu roll sendiri.
glucas