Ich suche nach einer Möglichkeit, Code innerhalb einer Funktion abhängig vom Vorhandensein von Text in der bearbeiteten Datei unter bestimmten Bedingungen auszuführen. Ich habe einen Weg gefunden, der funktioniert, sich aber nicht sehr "sauber" anfühlt.
Folgendes habe ich:
function! foo()
(...)
let v:errmsg = 'ok'
execute "silent! normal! :/" . l:pattern . "\r"
if v:errmsg == 'ok'
(... do stuff ...)
else
(... do other stuff ...)
endif
endfunction
Die Frage ist: Kann das gleiche Ergebnis irgendwie ohne die umständliche Verwendung von v: errmsg erzielt werden ?
Was ich vorhabe, ist etwas von der Form
function! foo()
(...)
if GrepInCurrentBuffer(l:pattern)
(... do stuff ...)
(...etc...)
search()
- siehe:h search()
:h function-list
Antworten:
Die Funktion, die Sie suchen, ist
search()
. Diese Funktion sucht ab der Cursorposition und wenn eine Übereinstimmung gefunden wird, wird die Zeilennummer zurückgegeben. Wird keine Übereinstimmung gefunden, wird 0 zurückgegeben. Die'ignorecase'
,'smartcase'
und'magic'
Optionen sind auf dem Suchmuster verwendet. Beachten Sie, dass Sie, wenn Sie auswählen möchten, wo die Suche beginnen soll, mitcursor()
dersetpos()
Funktion oder die Cursorposition festlegen und mit dergetcurpos()
Funktion die Cursorposition speichern können.Hier ist ein Beispiel dafür in Aktion:
Weitere Informationen zu den in dieser Antwort genannten Dingen finden Sie in den folgenden Hilfethemen:
:help search()
:help 'ignorecase'
:help 'smartcase'
:help 'magic'
:help cursor()
:help setpos()
:help getcurpos()
quelle
:echo search('pattern', 'nw') ? 1 : 0
stattdessen? :)Als Referenz für alle, die sich in Zukunft mit dieser Frage befassen, finden Sie hier eine funktionierende Lösung, die dem gleichen Muster wie der Pseudocode in der Frage folgt. Es basiert vollständig auf VanLasers Kommentaren sowohl zur ursprünglichen Frage als auch zur Antwort von EvergreenTree.
In dem speziellen Fall der eigentlichen Funktion, aus der diese Frage hervorging, erforderte die Lösung nicht wirklich die 'nw'-Flags. Diese Flags sollten die Lösung jedoch im Allgemeinen sicherer machen, basierend auf ihrer Beschreibung in der Hilfe von vim:
(aus
:help search
Vim 7.4)quelle