W funkcji vimscript l:matched
po wywołaniu muszę przypisać dopasowany ciąg do zmiennej search()
i zastanawiam się, czy istnieje krótszy sposób niż to, co obecnie robię:
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)
Idealnie chciałbym coś takiego
let l:matched = search_text(l:pattern)
bez uciekania się do getline()
. Czy istnieje taka funkcja vima, której wydaje się nie być w stanie znaleźć?
l:
deklaracji przestrzeni nazw.:let @/="pattern" | norm! ygn
i mieć zawartość w rejestrze 0 dostępną.Odpowiedzi:
Ponieważ kursor jest umieszczony na pierwszej literze dopasowania, prawdopodobnie możesz zrobić
:normal! y$
po wyszukiwaniu i uzyskać zawartość rejestru w zmiennej lokalnej.Innym podejściem, które, jak sądzę, zadziałałoby tutaj bardzo dobrze, byłoby użycie
:substitute
zn
flagą (tj. Bez faktycznej zamiany):... i które nazywacie tak:
To praktycznie stanowi
ActOn
funkcję oddzwaniania - będzie oceniana dla każdego dopasowania.źródło
:s
z pod-wyrażeniem zamień in
flaga jest dostępna tylko od Vima 7.3.627+. W przeciwnym razie musisz dokonać rzeczywistego podstawienia (kiepskie, ponieważ oznaczy to bufor jako zmodyfikowany). Prawdopodobnie chcesz również zapisać i przywrócić rejestr wyszukiwania@/
lub użyć:keeppatterns
.keeppaterns
->keeppatterns
. Jest przyczyną,E488: Trailing characters
która jest dość trudna do odnalezienia w przyczynie. Dzięki!