Quelle est la différence entre w et W en mode d'échappement de vim?

19

Je regarde les commandes d'aide rapide de vim help pour déplacer le curseur. Les lignes suivantes me confondent parce que je trouve que les deux fonctionnent de la même façon. Quelqu'un pourrait-il m'expliquer la différence avec un exemple.

N  w            N words forward
N  W            N blank-separated WORDS forward

La même question est également vraie pour e et E.

rahul.deshmukhpatil
la source

Réponses:

34

Selon cette feuille de triche, il semblerait que cela se résume à la ponctuation.

w   jump by start of words (punctuation considered words)
W   jump by words (spaces separate words)
e   jump to end of words (punctuation considered words)
E   jump to end of words (no punctuation)

Exemple

démonstration en utilisant w

          SS de w

démonstration en utilisant W

          ss de W

Remarquez dans la première démo comment quand west frappé en continu que le curseur atterrit sur la ponctuation, tandis que dans la 2ème démo la ponctuation est sautée. Il s'agit de la différence entre les commandes en minuscules et leurs équivalents en majuscules.

slm
la source
@slm: merci beaucoup pour une si bonne démo. avec une telle démo pas besoin de lire aussi bien
rahul.deshmukhpatil
5

C'est en fait assez simple, wsaute simplement au mot suivant, mais toute sorte de ponctuation ou d'espaces décompose les mots. West comme la commande de mot suivant de puissance industrielle, les mots ne sont délimités que par des espaces, que ce soit des tabulations, des espaces ou des sauts de ligne. ws'arrête également à la ponctuation délimitant, au cas où vous voudriez y faire face.

Je trouve la différence utile le plus souvent avec les noms d'hôtes:

birdman.cartoons.fictional.com # Fictional host

Avec w, vous vous arrêtez sur chaque partie du nom d'hôte et des points. Wsaute simplement le nom d'hôte entier et passe au #. Ces deux s'appliquent également à det cpour la suppression et la modification des mots.

Si positionné au début de la ligne ci-dessus, si vous vouliez remplacer birdman.cartoonspar quelque chose d'autre, vous utiliseriez 3cwpour remplacer les deux premières parties et le point au milieu. Vous ne pourriez pas le faire Wsans retaper le nom d'hôte entier.

kurtm
la source
2

C'est une différence qui est mieux comprise en considérant comment la ponctuation peut avoir un impact sur le concept de Vim de ce qui délimite un mot.

Dans le cas de cet exemple de texte:

This line is space separated with no commas
however, this line is—note—comma, separated,see

wpassera volontiers à la première lettre de chaque mot de la première ligne, car il n'y a que de l'espace pour négocier. Il échouera gravement sur la ligne 2 avec la ponctuation, descendant sur les premières lettres de chaque mot et les virgules et tirets. Pour passer d'un mot à l'autre à la ligne 2, vous devez utiliser Shiftw1 .

1. Même alors, Vim voit "is – note-virgule" comme un seul mot.

jasonwryan
la source
1

La différence peut être trouvée dans les pages d'aide internes du vim. Obtenons d'abord une description de w et W avec :helpw ou :help W:

  • w [compter] mots en avant. | exclusif | mouvement.
  • W [compte] MOTS en avant. | exclusif | mouvement.

Maintenant, nous voulons savoir quelles sont les définitions du mot et du MOT. Recherchez à nouveau le manuel avec :help wordet :help WORD, nous les trouvons.

  • Un mot est composé de a sequence of letters, digits and underscores, ou a sequence of other non-blank characters, separated with white space(espaces, tabulations,). Cela peut être modifié avec l'option «iskeyword». Une ligne vide est également considérée comme un mot.
  • Un MOT consiste en a sequence of non-blank characters, separated with white space. Une ligne vide est également considérée comme un MOT.
user9154844
la source