Ketika saya C-s
bisa mencari. Bagaimana saya harus melakukan fungsi yang saya dapat ikat misalnya C-r
yang akan membiarkan saya mencari di hasil beberapa permintaan pencarian yang telah ditentukan?
Seperti isi jendela adalah:
function xyz(a, b)
return a + b
end
Saya bisa C-M-s
dengan function.*
permintaan dan hasilnya akan function xyz(a, b)
.
Saya ingin memiliki fungsi tempat saya dapat memasukkan kueri dan mencari di hasil tersebut (yang akan dihasilkan di belakang mata saya secara otomatis).
MEMPERBARUI
Terima kasih atas solusinya. occur
, helm-occur
juga bekerja dengan sangat baik, tetapi saya telah menerima jawaban Jordon Biondo karena dia memberikan kode yang saya butuhkan untuk menjawab pertanyaan saya sepenuhnya.
helm-swoop
, tetapi pertanyaan Anda (dan terutama judulnya) tidak terlalu jelas mengenai hal ini. Mungkin saya tidak mendapatkan pertanyaan Anda karena saya tidak terbiasa dengan helm.imenu
bekerja dengan baik untuk saya! Kecuali saya mencari solusi umum untuk pertanyaan sayaJawaban:
Pendekatan sederhana adalah dengan hanya menggunakan rgrep.
gunakan M-x
rgrep
dan tentukan pencarian "fungsi" dalam file saat ini di direktori saat ini. Anda dapat menyelesaikan ini dalam sebuah perintah sehingga Anda tidak perlu menentukan opsi setiap kali seperti ini:Ini akan menghasilkan buffer yang dapat ditelusuri dengan tanda tangan fungsi dan Anda dapat melompat ke definisi jika Anda mau.
sumber
grep
,rgrep
,occur
, Dan sejenisnya pencari hanya baris demi baris . Artinya, konteks pencarian adalah satu baris. Saya pikir OP meminta untuk mencari definisi fungsi. Tetapi karena jawaban ini diterima, saya kira pertanyaan yang diajukan tidak benar-benar apa yang diinginkan.function xyz(a, b)
itu, jika lua Anda diformat dengan benar adalah persis apa yang akan Anda dapatkan.function xyz(a, b)
.Akan
occur
bekerja untukmuM-x
occur
atauM-s o
kemudian memasukkan kueri Anda akan memberi Anda daftar baris yang cocok dengan regexp itu. Anda kemudian dapat menggunakanC-s
untuk mencari di dalam buffer Occur untuk mempersempit pencarian Anda dalam baris yang cocok.sumber
Emacs memiliki perintah yang disebut
occur
sangat cocok untuk jenis tugas ini. Jika Anda memasang Helm, maka Anda dapat menggunakannyahelm-occur
.Terjadi
The
occur
Perintah merupakan bagian dari emacs vanili, dan terikat untukM-s o
secara default. Occur akan meminta Anda untuk mencari regexp, dan kemudian akan membuka jendela baru yang menunjukkan semua baris di buffer saat ini yang berisi kecocokan.*Occur*
Buffer yang dihasilkan dapat dicari menggunakanisearch
(C-s
).M-s o function RET
untuk menampilkan semua baris yang cocok dengan "fungsi"C-x o
untuk memindahkan fokus ke*Occur*
bufferC-s
untuk memulai pencarian dalam hasil pencarianHelm Terjadi
Jika Anda sudah memasang helm, Anda dapat menggunakannya
helm-occur
untuk melakukan hal serupa. Dalam hal ini,*Helm Occur*
buffer tidak akan dapat dicari secara langsungC-s
. Di Helm Anda dapat mencari beberapa istilah pencarian hanya dengan memisahkannya dengan spasi.M-x helm-occur RET
untuk membuka jendela Helm Occurfunction
untuk menampilkan semua baris yang mengandung "fungsi"SPC foo
untuk mempersempit hasil ke garis juga mengandung fooDalam salah satu mode ini, memilih kecocokan dalam buffer yang terjadi dan menekan enter akan mengarahkan Anda ke baris dalam kode.
sumber
Jika Anda menggunakan perpustakaan Icicles maka Anda dapat dengan mudah melakukan hal semacam ini. Apa yang Anda minta (jika saya mengerti dengan benar), adalah mencari hanya dalam konteks pencarian tertentu .
Misalnya, seperti dalam kasus ini, Anda mungkin ingin mencari hanya di dalam definisi fungsi - konteks pencarian adalah definisi fungsi. Dalam Lisp, ini akan menjadi seperti
defun
s.Icicles memiliki beberapa perintah pencarian Icicles yang telah ditentukan untuk mencari definisi seperti ini. Ini secara kolektif disebut perintah Icicles Imenu .
Untuk mencari hanya definisi perintah, Anda dapat menggunakan perintah
icicle-imenu-command-full
. Untuk mencari hanya definisi fungsi non-interaktif, gunakan perintahicicle-imenu-non-interactive-function-full
.Di luar mencari definisi, Anda dapat dengan mudah menentukan segala jenis konteks yang akan dicari. Cara paling sederhana adalah dengan menyediakan regexp. Perintah
icicle-search
meminta Anda untuk regexp mendefinisikan konteks pencarian. Anda juga dapat menggunakan fungsi untuk menentukan konteks pencarian.Kemungkinan lain termasuk:
Mencari teks dari berbagai jenis HAL (misalnya, sexps, kalimat, daftar, string, komentar, elemen XML, ...), yaitu, mengabaikan teks lain di luar HAL.
Mencari zona teks yang telah memberikan teks atau properti overlay, yaitu mengabaikan teks lain.
CATATAN:
Jawaban lain di sini yang menyebutkan
occur
dan sejenisnya (helm-occur
) menyediakan jenis pencarian konteks yang terbatas: konteks pencarian hanyalah garis - garis buffer.Itu jauh lebih terbatas itu, katakanlah, mencari dalam definisi fungsi keseluruhan, yang adalah apa yang saya pikir Anda minta. Dengan Icicles , perintah
icicle-occur
(terikat keC-c '
) memungkinkan Anda mencari di dalam baris sebagai konteks pencarian.sumber
Dengan Isearch + :
C-M-s .+function.+
, untuk mencari seluruh baris yang berisifunction
.C-z .
diikuti oleh regexp untuk sesuatu yang ingin Anda cari di baris yang berisifunction
.(Opsional) Ulangi # 2 dengan pola lain (regexps) agar sesuai dengan baris yang sama. Pertandingan bisa dalam urutan apa pun di dalam garis.
Alih-alih langkah # 1, Anda bisa mulai dengan
C-M-s .+ C-z . function
. Intinya adalah untuk mencari seluruh garis yang berisifunction
bersama dengan pola lain yang Anda suka.Cara
C-z .
kerjanya: Ini meminta Anda untuk mencocokkan pola inline (misalnyafunction
). Itu membungkus itu dengan.*
di setiap sisi, untuk mendapatkan pola garis penuh (misalnya.*function.*
). Ini menambahkan predikat filter yang mensyaratkan bahwa string pencarian Anda saat ini (.+
) juga cocok dengan pola itu (misalnya.*function.*
).Lihat Penyaringan Pencarian dinamis untuk informasi lebih lanjut.
sumber