Mam w moim vimrc:
func! AddSpaceBeforeEqual()
s/\([a-z)_0-9"'\[\]]\)=/\1 =/ge
endfunc
Używam vint, aby pobrudzić mój vimrc i otrzymałem następujące ostrzeżenie:
ProhibitCommandWithUnintendedSideEffect Unikaj poleceń z niezamierzonymi skutkami ubocznymi. Unikaj używania: s [ubstitute], ponieważ przesuwa on kursor i drukuje komunikaty o błędach. Preferuj funkcje (takie jak search ()) lepiej dostosowane do skryptów. Dla wielu poleceń vima istnieją funkcje, które robią to samo z mniejszą liczbą efektów ubocznych. Zobacz: funkcje pomocy (), aby uzyskać listę wbudowanych funkcji. Przewodnik po stylu Google Vimscript
Jednak nie sądzę, że są one sposobem na wykonanie podstawienia bez użycia :s
polecenia.
Na przykład search()
funkcja podaje linie pasujące do wzorca, ale nie ma możliwości wykonania podstawienia. substitute()
Funkcja działa na sznurku, a nie zastępować na całego pliku.
Czy powinienem samodzielnie wdrożyć metodę zastępczą, czy jest to mądrzejszy sposób na przepisanie mojej funkcji?
źródło
:help function-search-undo
:s
Komenda jest czystym podejście Vimscript.Domyślam się, że ostrzeżenie oznacza jedynie, że kursor najprawdopodobniej zostanie źle ustawiony po jego użyciu (co można obejść, używając
winsaveview()
funkcji przed iwinrestview()
polecenia po jej użyciu). Musisz także zadbać o możliwe błędy, które mogą wystąpić. Zwykle odbywa się to za pomocąe
flagi. Trzeba także zadbać o niektóre ustawienia, takie jakgdefault
ustawienie, które odwraca znaczenieg
flagi.Trzeba zająć się tymi szczegółami i to prawdopodobnie jest podstawową przyczyną tych ostrzeżeń. Ale to nie oznacza unikania użycia
:s
polecenia. Użycie:s
polecenia jest całkowicie w porządku , jeśli chcesz zastąpić coś w bieżącym buforze.(Uwaga: można oczywiście zapętlić wszystkie linie i zastosować metodę search () / getline () / setline (). Ale zwykle jest to wolniejsze.)
źródło