Dalam fungsi vimscript, saya perlu menetapkan string yang cocok ke variabel l:matched
setelah memanggil search()
dan saya bertanya-tanya apakah ada cara yang lebih pendek dari apa yang saya lakukan saat ini:
let l:pattern = '\v^Foo: \zs.*'
let l:line = search(l:pattern)
let l:line_text = getline(l:line)
let l:matched = matchstr(l:line, l:pattern)
Idealnya, saya ingin sesuatu seperti
let l:matched = search_text(l:pattern)
Withouth beralih ke getline()
. Apakah ada fungsi vim yang sepertinya tidak dapat saya temukan?
l:
deklarasi namespace.:let @/="pattern" | norm! ygn
dan memiliki konten dalam register 0 tersedia.Jawaban:
Karena kursor ditempatkan pada huruf pertama pertandingan, Anda mungkin dapat melakukan
:normal! y$
setelah pencarian, dan mendapatkan konten register dalam variabel lokal Anda.Pendekatan lain, yang saya pikir akan bekerja di sini dengan sangat baik, akan digunakan
:substitute
dengann
bendera (yaitu tanpa substitusi yang sebenarnya ):... dan yang Anda sebut seperti ini:
Ini praktis membuat
ActOn
fungsi panggilan balik - itu akan dievaluasi untuk setiap pertandingan.sumber
:s
dengan sub-ganti-ekspresi dann
bendera hanya tersedia sejak Vim 7.3.627+. Kalau tidak, Anda perlu melakukan substitusi sebenarnya (lumpuh karena ini akan menandai buffer telah dimodifikasi). Anda mungkin juga ingin menyimpan dan mengembalikan register pencarian@/
,, atau menggunakan:keeppatterns
.keeppaterns
->keeppatterns
. Ini yang menyebabkanE488: Trailing characters
agak sulit untuk melacak kembali ke penyebabnya. Terima kasih!