Czy istnieje wzór podobny do ^ w vimie?

20

W trybie normalnym Vima 0polecenie przenosi cię do pierwszej kolumny wiersza i ^logicznie rozpoczyna wiersz (np. Pierwszy znak inny niż biały znak). W świecie wyrażeń regularnych ^dopasowuje pierwszy znak w wierszu, spacje lub nie. Czy Vim ma wzorzec, który zachowuje się jak polecenie „^” - pasujące do logicznego początku linii?

Michał
źródło
Myślę, że ^ w wyrażeniu regularnym zwykle pasuje do początku wiersza, a nie do pierwszego znaku. ^. dopasuje początek, a następnie pierwszy znak, a nie początek, a następnie drugi znak.
bdsl,

Odpowiedzi:

17

Nie ma skrótu do dopasowania pierwszego znaku niebiałego w linii, musisz sam zbudować wzór, np .:

^\s*restofpattern

Jeśli nie chcesz uwzględniać białych znaków w dopasowaniu, musisz zastosować asercję o zerowej szerokości, na przykład:

\(^\s*\)\@<=restofpattern

Niezupełnie ładnie, ale przynajmniej wykonuje to zadanie.

Karl Bielefeldt
źródło
6

Aby dopasować pierwszą nie- białą postać, używaj jej \Stak, jak zwykle.


Jeśli użyjesz ^wyrażenia regularnego w vimie, dopasuje on rzeczywisty początek linii, nawet jeśli zawiera spacje.

Na przykład ten wiersz zaczyna się spacją:

 <- there's a space there you can't see :)

Ta komenda vim usunie spację wiodącą:

:%s/^ //

w wyniku czego:

<- there's a space there you can't see :)

Zatem wyrażenie regularne będzie zachowywać się tak, jak się spodziewasz, nawet jeśli polecenie nie.

Michael Hampton
źródło
Przypuszczam, że wyjaśnisz opinię negatywną. O ile wiem, ta odpowiedź jest poprawna.
Michael Hampton
1
Nie głosowałem za odrzuceniem, ale dla wyjaśnienia: zastanawiałem się, czy Vim ma operator pasujący do pierwszego niepozbawionego białych znaków wiersza. ^Operator (jak wszystkich rozsądnych implementacje regex), będzie pasował do pierwszego znaku, nawet jeśli jest to spacja.
Michael
Jak się spodziewałeś, że zrobisz to normalnie? Zwykle w wyrażeniu regularnym użyłbyś czegoś takiego jak \Sdopasowanie pierwszego znaku niebiałego.
Michael Hampton
2
\Sdopasuje dowolny znak niebiałej spacji. Ujmując to inaczej, zastanawiam się czy Vim ma skrót zerowej szerokości na to: ^\W*\S.
Michael
1
Żaden silnik, o którym wiem, nie zapewnia takiej funkcjonalności, ale z drugiej strony - kiedy miałbyś ochotę na silnik ogólnego przeznaczenia? Vim nie jest silnikiem regularnym wyrażeń regularnych. Jest to edytor z silnikiem regex, więc zastanawiałem się, czy ma jakieś specjalne konstrukcje dla czegoś, co ma znaczenie tylko w edytorze.
Michael