В чем разница между w и W в escape-режиме vim?

19

Я смотрю на команды vim help quickref для перемещения курсора. Следующие строки сбивают меня с толку, потому что я считаю, что они работают одинаково. Может кто-нибудь прояснить мне разницу с примером.

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

Тот же вопрос верен и для е, и для е.

rahul.deshmukhpatil
источник

Ответы:

34

Судя по этому шпаргалке, это, кажется, сводится к пунктуации.

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)

пример

демонстрация с использованием w

          сс ж

демонстрация с использованием W

          сс W

В первой демонстрации обратите внимание, как при wнепрерывном нажатии курсор попадает на пунктуацию, а во второй демонстрации пунктуация пропускается. В этом разница между строчными командами и их прописными эквивалентами.

SLM
источник
@slm: большое спасибо за такую ​​замечательную демонстрацию. с такой демонстрацией не нужно читать ANS, а также
rahul.deshmukhpatil
5

Это на самом деле довольно просто, wпросто переходит к следующему слову, но любые знаки препинания или пробелы разбивают слова. WПодобно команде следующего слова промышленного уровня, слова ограничиваются только пробелами, будь то табуляция, пробел или перевод строки. wостанавливается также на пунктуации с разделителями, если вы хотите с этим справиться.

Я нахожу разницу полезной чаще всего с именами хостов:

birdman.cartoons.fictional.com # Fictional host

С помощью wвы останавливаетесь на каждой части имени хоста и точек. Wпросто пропускает все имя хоста и переходит на #. Это также относится dи cк удалению и изменению слов.

Если вы располагаете в начале вышеуказанной строки, если вы хотите заменить birdman.cartoonsчто-то еще, вы должны 3cwзаменить обе первые две части и точку посередине. Вы не можете сделать это Wбез повторного ввода полного имени хоста.

kurtm
источник
2

Эту разницу лучше всего понять, если учесть, как пунктуация может влиять на концепцию Vim о том, что ограничивает слово.

В случае этого примера текста:

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

wс радостью перейдем к первой букве каждого слова в первой строке, так как есть только место для переговоров. Он потерпит неудачу плохо на линии 2 с пунктуацией, опускаясь на первых букв каждого слова и запятые и отдельными штрихами. Для перехода от слова к слову в строке 2 вам нужно будет использовать Shiftw1 .

1. Даже в этом случае Vim видит слово «is – note – comma» как одно слово.

jasonwryan
источник
1

Разницу можно найти на внутренних страницах справки vim. Давайте сначала получим описание w и W с помощью :helpw или :help W:

  • w [считать] слова вперед. | Эксклюзивные | движение.
  • W [count] СЛОВА вперед. | Эксклюзивные | движение.

Теперь мы хотим знать, каковы определения слова и слова. Снова найдите руководство с помощью :help wordи :help WORDмы их найдем.

  • Слово состоит из a sequence of letters, digits and underscores, или a sequence of other non-blank characters, separated with white space(пробелы, табуляции,). Это можно изменить с помощью опции «iskeyword». Пустая строка также считается словом.
  • СЛОВО состоит из a sequence of non-blank characters, separated with white space. Пустая строка также считается словом.
user9154844
источник