Cari dan ganti melalui proyek multi-guna di AUCTeX?

8

Saya akan mengadopsi Emacs menjadi satu-satunya editor yang saya gunakan dalam semua yang saya tulis termasuk dokumen LaTeX. Saya berasal dari editor WYSIWYG yang melayani tujuan itu dengan cukup baik, yaitu TexStudio atau TXS. Untuk transisi dari TXS ke Emacs, saya masih kehilangan cara TXS berurusan dengan mengeksekusi pencarian kueri regexp besar dan menggantinya dengan menyoroti kecocokan dan pembatasan pencarian hanya untuk .texfile yang terkait dengan proyek tersebut . Saya sangat merindukan itu di Emacs sekarang. Lihat tangkapan layar TXS di bawah ini:

Permintaan TeXStudio dalam Proyek MultiTile LaTeX masukkan deskripsi gambar di sini

Saya ingin menekankan poin-poin dalam alur kerja yang ingin dicapai di Emacs:

  1. Pencarian dan Penggantian Kueri RegExp hanya dalam .texfile terkait proyek .
  2. Sorot pertandingan
  3. Gambaran umum dari hasil yang disorot secara bersamaan dalam tata letak yang dapat dikelola (mirip dengan tampilan log Magitpada Emacs ketika Anda menekan ldiikuti oleh yang lain latau hanya seperti C-x ddalam mode Dired
  4. Bagaimana mengetahui berapa banyak penggantian atau inspeksi yang dilakukan dengan atau tersisa dan cara untuk melanjutkan kueri jika rusak oleh keystroke canggung yang menghentikan kueri
  5. Cara bersih dari kueri berantakan ini dengan menutup dan menyimpan semua file terkait dan kembali ke status sebelum menjalankan kueri ini

Saya membaca posting ini tetapi niat saya adalah untuk menjadi lebih seperti CWitu siapa pun dapat berbagi alur kerja terbaiknya untuk menyelesaikan pekerjaan umum ini. Pendekatan saya saat ini adalah sebagai berikut:

Alur Kerja Pertama

  1. Mode Dired % gakan menandai semua file yang berisi regexp itu. Cons: ini akan mencakup bahkan file yang tidak terkait dengan proyek termasuk file non .tex.
  2. C-x 3 membuka buffer baru sambil mengawasi buffer pertama sebagai gambaran umum orientasi saya tentang file apa yang ditandai yang harus saya tanyakan dalam buffer baru secara individual
  3. Menjalankan kueri dengan C-c q. Ini memiliki saklar yang sangat bagus seperti !mengganti semua tanpa meminta dan menyoroti pertandingan dalam file yang dibuka. Tapi ini berarti saya harus menjalankan kueri yang sama setiap waktu dan untuk setiap file yang ditandai.
  4. Setelah melakukan semua file yang ditandai saya tekan C-x s !untuk menyimpan semua dalam satu keystroke. Fiuh!

masukkan deskripsi gambar di sini

Alur Kerja Kedua - lebih disukai

  • Menandai semua .texfile menggunakan % mDired-mode oleh regexp untuk menandai hanya .texfile jadi pada dasarnya berjalan \.texakan membawa saya ke sana.
  • C-x 3 sama seperti di atas untuk menyimpan satu buffer untuk tinjauan umum dan yang lainnya untuk query
  • Menjalankan Qdalam Dired yang merupakan permintaan ganti regexp dalam file yang ditandai saja. Atau Ahanya permintaan pencarian regexp. Permintaan lengkap akan dieksekusi dan menu bantuan ?disediakan dengan murah hati
  • C-x s !simpan dan tutup semua kekacauan. Kalau tidak, saya harus menutup file yang dibuka satu per satu yang membosankan. Saya harap ada cara untuk menutup hanya mereka yang kita ganggu.

masukkan deskripsi gambar di sini

Bagaimana cara saya memperkirakan permintaan pencarian / penggantian regex TXS di multifile?

Catatan

  • Emacs 24.4 di Windows 7
gelar doktor
sumber
Pertanyaan ini saat ini memiliki suara "dekat" karena terlalu luas, yang saya cenderung setujui. Bisakah Anda mempersempit pertanyaan menjadi versi yang lebih terpisah (mungkin di sepanjang baris "bagaimana cara memperkirakan pencarian permintaan regX TeXStudio dalam banyak file")? "Apa alur kerja terbaikmu?" sangat luas dan cenderung menghasilkan jawaban yang panjang dan berdasarkan opini.
Dan
Saya tidak bisa menulis jawaban lengkap sekarang, tetapi Anda harus melihat ke wgrep.
Malabarba
@Malabarba, harap pertimbangkan untuk meningkatkan komentar Anda menjadi jawaban jika Anda pikir ini akan memenuhi kriteria yang disebutkan dalam posting.
doktoral

Jawaban:

3

Jika saya mengerti dengan benar, Anda ingin mencari pola teks di proyek Anda, maka Anda mungkin ingin menggunakan Proyektil bersama dengan Helm.

  • M-x helm-projectile-grep
  • Ketikkan pola teks atau pola regex.
  • Lihat hasil yang diperbarui untuk setiap karakter yang dimasukkan.

Berikut ini adalah demo dari helm-projectile-grep:

helm-proyektil-grep

Anda dapat menyimpan ke dalam buffer terpisah untuk merujuk di kemudian hari menggunakan Save results in grep bufferaction` (Anda TABsecara default beralih ke action buffer menggunakan ).

Jika Anda belum pernah mendengar tentang Helm, Anda dapat membaca tutorial Helm saya . Kunjungi tutorial Helm Projectile saya untuk demo dan panduan lebih lanjut tentang Helm Projectile.

Alternatif, Anda juga dapat menggunakan rgrep, yang merupakan bawaan:

  • M-x rgrep
  • Masukkan teks / pola regex ke Search for:prompt, yaitu "test"
  • Masukkan jenis file untuk mencari ke Search for "test" in file:, yaitu *.tex.
  • Masukkan direktori untuk pencarian secara rekursif (karena itu namanya rgrep).
  • tekan RET dan lihat hasilnya.

Sebuah rgrepdemo:

masukkan deskripsi gambar di sini

Sehubungan dengan kriteria Anda:

  1. Pencarian dan Penggantian Kueri RegExp hanya dalam .texfile terkait proyek .

Baik Helm dan rgrepmendukung fitur ini.

  1. Sorot pertandingan

Sama seperti di atas.

  1. Gambaran umum dari hasil yang disorot secara bersamaan dalam tata letak yang dapat dikelola

Sama seperti di atas.

  1. Bagaimana mengetahui berapa banyak penggantian atau inspeksi yang dilakukan dengan atau tersisa dan cara untuk melanjutkan kueri jika rusak oleh keystroke canggung yang menghentikan kueri

Jika Anda ingin mengganti kecocokan, Anda dapat menggunakan wgrep untuk melakukan penggantian *Grep*buffer. Setelah Anda selesai dan sinkronkan kembali*Grep* buffer, semuanya akan diganti sesuai dengan teks yang Anda ganti.

Anda "melanjutkan" dengan menjalankan kueri lagi jika Anda tidak sengaja menghentikannya. Tetapi menggunakan Helm, Anda memiliki helm-resumeperintah yang melanjutkan Anda kembali ke operasi berjalan sebelumnya jika Anda secara tidak sengaja membatalkannya.

  1. Cara bersih dari kueri berantakan ini dengan menutup dan menyimpan semua file terkait dan kembali ke status sebelum menjalankan kueri ini

Sebenarnya, Anda tidak perlu membunuh buffer apa pun jika Anda menggunakan alat seperti helm-mini . Mengelola ribuan buffer terbuka sangat mudah: Anda dapat mempersempit buffer keinginan Anda dengan pola teks pendek. Anda dapat membunuh sekaligus jika Anda mau.

Berikut ini adalah demo dari helm-mini:

helm-mini

Lihat penjelasan detail di halaman Helm Github, di bagian "Penggunaan Lanjutan" .

Tu Do
sumber
Saya pikir saya harus mencoba dan belajar proyektil dengan helm. Terima kasih untuk tutorial Anda yang kaya tangkapan layar!
gelar doktor
paket apa saya perlu menginstal untuk mendapatkan fungsi-fungsi yang layak: projectile, helmdan helm-projectilejelas, apa lagi? Plus ada dua pkg MELPA helm-pojectiledan helm projectile-allrekomendasi di sini?
gelar doktor
Sudah cukup. Kemudian, ikuti konfigurasi di panduan saya. Anda harus memeriksa Installationbagian dalam panduan Proyektor Helm dan Helm saya.
Tu Do
penekanan tombol apa yang Anda gunakan rgrepuntuk mengunjungi kejadian pertandingan (maju atau mundur) di buffer atas dan bawah?
doktoral
1
itu adalah pengalaman yang mengubah Emacs untuk bertemu helm dan proyektil helm, Terima kasih! Tapi, pencarian grep tidak berfungsi. Dapatkah Anda tolong
doctorate
5

Jika saya mengerti apa yang Anda inginkan, RefTeX ' reftex-isearch-minor-modeharus menjadi apa yang Anda cari. Dari uraiannya di manual:

Alihkan mode minor yang memungkinkan pencarian inkremental untuk bekerja secara global pada seluruh dokumen multifile. File akan dicari dalam urutan yang muncul dalam dokumen.

Seperti yang dilaporkan oleh T. Verron, ini bekerja dengan regexps juga.

Untuk mengaktifkan mode minor ini di semua * TeX buffer, tambahkan salah satu baris berikut ke file init Anda

(add-hook 'TeX-mode-hook (lambda () (reftex-isearch-minor-mode))) ; for AUCTeX
(add-hook 'tex-mode-hook (lambda () (reftex-isearch-minor-mode))) ; for the Emacs' bultin TeX mode.
giordano
sumber
Senang tahu karena saya menggunakan reftex. Tetapi karena tidak ada regexp yang didukung, saya ragu pendekatan ini akan lebih baik!
gelar doktor
2
Rupanya, menekan M-rbuffer pencarian akan beralih ke pencarian regexp, seperti halnya untuk pencarian reguler isearch.
T. Verron
1
Dan pintasan biasa untuk regexp isearch ( C-M-s) juga berfungsi.
T. Verron
@ T. Verron terima kasih! Sebenarnya saya belum menggunakan fitur ini secara ekstensif, terakhir kali saya mencobanya, pencarian regexp tidak berfungsi, siapa yang tahu apa yang saya coba;-)
giordano
@ T. Verron dari bilah menu-> ref-> global action-> versi pencarian dan ganti versi untuk seluruh dokumen memberikan regexp yang lebih baik karena Anda dapat mengedit ekspresi Anda saat di minibuffer tapi saya tidak tahu apa fungsi ini dan apa itu pengikat kunci.
gelar doktor
3

Jika Anda tidak sadar, Anda dapat membuka Dired hanya pada set file tertentu (terletak di direktori mana saja, di mana saja). TKI, Anda bisa menggunakan Dired sebagai titik masuk Anda untuk semua file proyek. Fitur Dired yang biasa berfungsi dalam konteks ini: beroperasi pada file yang ditandai, dll.

Jika Anda menggunakan perpustakaan Bookmark + maka Anda dapat memiliki bookmark Dired yang Anda gunakan untuk memberi Anda "tampilan" yang berbeda dari set file yang berbeda, tanda mereka, dll.

(Emacs Wiki sedang dalam perbaikan saat ini, dan untuk beberapa hari lagi, sehingga tautan itu sementara tidak dapat diakses.)

Drew
sumber
Apakah ini seperti penyempitan Emacs C-x n n? dapatkah Anda memperkaya jawaban Anda dengan lebih detail. Terima kasih.
doktoral
Tidak; tidak ada hubungannya dengan C-x n n- fitur Dired hanya sedikit dikenal. C-h f diredmemberi tahu Anda bahwa Anda dapat memberikan argumen nama (dan absolut) nama file (dan direktori) sebagai ganti nama direktori. Itulah kuncinya. Library Dired + memudahkan penggunaan ini secara interaktif. (Tetapi sekali lagi, wiki sedang down untuk sementara, sehingga tautannya juga tidak tersedia saat ini.)
Drew