Vim: Word vs WORD

84

Uczę się Vima i nie mogę pojąć różnicy między wordi WORD.

Otrzymałem z podręcznika Vima.

Słowo składa się z sekwencji liter, cyfr i znaków podkreślenia lub sekwencji innych niepustych znaków, oddzielonych spacjami (spacje, tabulatory). Można to zmienić opcją „iskeyword”. Za słowo uważa się również pusty wiersz.

SŁOWO składa się z sekwencji niepustych znaków, oddzielonych odstępami. Pusty wiersz jest również uważany za SŁOWO.

Czuję wordi jestem WORDtym samym. Oba są sekwencją niepustych znaków oddzielonych białymi spacjami. Pustą linię można uznać za oba wordi WORD.

Pytanie:
Jaka jest różnica między nimi?
A dlaczego / kiedy ktoś miałby używać WORDover word?

Zrobiłem już wyszukiwanie w Google i SO, ale ich wyszukiwarka interpretuje WORDjako po prostu wordtak, jakbym szukał Vim word vs wordi oczywiście nie znajdę nic użytecznego.

octref
źródło
2
Jest to wyjaśnione, a nawet zilustrowane w :h 03.1. Sprawdź instrukcję obsługi.
glts
10
Twoje pytanie zmieniło sytuację podczas wyszukiwania vim WORD and word- to teraz pierwszy wynik wyszukiwania :)
Al.G.
1
@ Al.G. Dobrze wiedzieć. Dzięki!
oktref
2
W języku angielskim „lub” występuje niejednoznaczność. Oznacza to, że słowo składa się z sekwencji (litery LUB cyfry LUB podkreślenia), XOR (sekwencja innych niepustych znaków), oddzielonych spacjami (spacje, tabulatory).
user1433150
@ user1433150, który był pomocny, dzięki. Ale nawet po tym wyjaśnieniu wciąż jest coś zagmatwanego. Mówią: „lub sekwencja innych niepustych znaków, oddzielonych spacjami (spacje, tabulatory)”, ale jeśli to prawda, oznacza to po prostu dowolne słowo. Więc wydaje mi się, że mówią "to mniejszy zestaw XOR wszystko". Czy to jest poprawne?
Charlie Parker,

Odpowiedzi:

115
  • SŁOWO jest zawsze oddzielone spacjami .
  • Słowo jest rozdzielane znakami niebędącymi słowami kluczowymi , które można konfigurować. Białe znaki nie są słowami kluczowymi i zazwyczaj inne znaki (np. ()[],-) Też nie. Dlatego słowo jest zwykle mniejsze niż SŁOWO; nawigacja po słowach jest bardziej szczegółowa.

Przykład

This "stuff" is not-so difficult!
wwww  wwwww  ww www ww wwwwwwwww    " (key)words, delimiters are non-keywords: "-! and whitespace
WWWW WWWWWWW WW WWWWWW WWWWWWWWWW   " WORDS, delimiters are whitespace only
Ingo Karkat
źródło
1
Zauważ, że możesz użyć: set iskeyword, aby zmienić działanie 'W'. Zobacz: pomoc 'iskeyword', aby uzyskać więcej informacji.
Jessie Ross
Powyższy przykład jest błędny. Podwójne cudzysłowy to także słowa (lub część jednego słowa, w zależności od opcji „iskeyword”). Dlatego też powinien być oznaczony „w”. A także myślnik.
Flashrunner,
@Flashrunner To zależy od 'iskeyword' opcji, jak wspomniał Jared Ross. Domyślnie działa tak, jak napisałem.
Ingo Karkat
:set iskeyword=a-z,A-Z,\",- |This |"stuff" |is |not-so |difficult|! :set iskeyword=a-z,A-Z |This |"|stuff|" |is |not|-|so |difficult|! |- gdzie kończy się „w”. Jak widać, zawsze jest to słowo.
Flashrunner,
Komentarz Jareda Rossa też jest błędny. Słowo kluczowe iskeyword zmienia to, co robi „w”, a nie „W”.
Flashrunner,
20

Jeśli to zrobię viw(„wybierz wewnętrzną word”), gdy mój kursor znajduje się appw następującym wierszu, zostanie zaznaczone app:

app/views/layouts/admin.blade.php

Jeśli wykonam viW( WORD), gdy mój kursor znajduje się w tym samym miejscu, zaznacza całą sekwencję znaków. A WORDobejmuje znaki words, które są podobne do angielskich słów, takie jak gwiazdki, ukośniki, nawiasy, nawiasy itp.


źródło
Ostatni akapit powyższego wyjaśnienia jest niejasny. Brakuje kilku kluczowych słów, które wyjaśniłyby różnicę.
Praym
15

Zgodnie z dokumentacją Vima (: h 03.1)

  • Słowo kończy się znakiem niebędącym słowem, takim jak „.”, „-” lub „)”.

  • SŁOWO kończy się ściśle spacją. To może nie być słowo w normalnym sensie, stąd duże litery.

na przykład.

           ge      b          w                             e
           <-     <-         --->                          --->
    This is-a line, with special/separated/words (and some more). ~
       <----- <-----         -------------------->         ----->
         gE      B                   W                       E

Jeśli kursor znajduje się na m (lub więcej powyżej)

  • słowo oznaczałoby „więcej” (tj. oddzielone znakiem „)” innym niż słowo)

  • podczas gdy SŁOWO oznaczałoby „więcej”. (tj. rozdzielone tylko spacjami)

podobnie, jeśli kursor jest na p (specjalne)

  • słowo oznaczałoby „wyjątkowy”
  • podczas gdy SŁOWO oznaczałoby „specjalne / oddzielone / słowa”
Praym
źródło
14

Aby uzupełnić poprzednie odpowiedzi ... Wizualizuję to w ten sposób; SŁOWO jest większe niż słowo, zawiera więcej ... wprowadź opis obrazu tutaj

run_the_race
źródło
0

Inaczej to wyrazić. Jeśli kodujesz i chcesz przejść przez linię, zatrzymując się na ogranicznikach i rzeczach, które "(). [],:" Użyj w.

jeśli chcesz je ominąć i po prostu przeskoczyć do słów, powiedzmy jak w powieści lub opowiadaniu, użyj W.

Do kodowania prawdopodobnie najczęściej używanym jest małe w. Zależy od tego, gdzie jesteś w kodzie.

eaglerockdude
źródło
0

To problem gramatyczny przy zrozumieniu definicji „słowa”.

Na początku utknąłem w chińskiej wersji tej definicji (może być brakujące tłumaczenie).


Definicja jest zdecydowanie poprawna, ale należy ją czytać tak:

A word consists of:
   [(a sequence of letters,digits and underscores),
or (a sequence of other non-blank characters)], 
separated with white space (spaces, tabs, <EOL>).

Białe znaki były potrzebne tylko w przypadku oddzielania dwóch takich samych typów „słów”


Więcej przykładów w nawiasach:

(przykład ^ i $% ^ Przykład) trzy "słowo": (przykład), (^ i $% ^) i (Przykład)

(^ & ^ & ^ ^ && ^ & ^ ) dwa "słowo": (^ & ^ & ^ ^) oraz (&& ^ & ^ )

(jesteśmy w stackoverflow) pięć „słów”: (my), ('), (re), (in) i (stackoverflow)

IsaacAnthony Hu
źródło