Qual é a diferença entre w e W no modo de escape do vim?

19

Eu estou olhando os comandos quickref do vim help para mover o cursor. As linhas a seguir me confundem porque acho que as duas funcionam da mesma maneira. Alguém poderia me elaborar a diferença com um exemplo.

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

A mesma pergunta é verdadeira para e e E também.

rahul.deshmukhpatil
fonte

Respostas:

34

De acordo com esta cábula , parece que tudo se resume à pontuação.

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)

Exemplo

demo usando w

          ss de w

demo usando W

          ss de W

Observe na primeira demonstração como quando wé atingido continuamente que o cursor pousa na pontuação, enquanto na 2ª demonstração a pontuação é ignorada. Essa é a diferença entre os comandos em minúsculas e seus equivalentes em maiúsculas.

slm
fonte
@ slm: muito obrigado por uma demonstração tão boa. com tal demonstração há necessidade de ler ans bem
rahul.deshmukhpatil
5

Na verdade, é bastante simples, wapenas pula para a próxima palavra, mas qualquer tipo de pontuação ou espaço em branco divide as palavras. Wé como o comando da próxima palavra de força industrial, as palavras são delimitadas apenas por espaços em branco, seja tab, espaço ou nova linha. wtambém para na pontuação delimitadora, caso você queira lidar com isso.

Acho a diferença útil com mais freqüência nos nomes de host:

birdman.cartoons.fictional.com # Fictional host

Com w, você para em cada parte do nome do host e nos pontos. Wapenas pula o nome do host inteiro e entra no #. Isso também se aplica a de cpara excluir e alterar palavras.

Se posicionado no início da linha acima, se você quiser substituir birdman.cartoons por outra coisa, 3cwsubstitua as duas primeiras partes e o ponto no meio. Você não poderia fazê-lo Wsem redigitar o nome do host inteiro.

Kurtm
fonte
2

É uma diferença que é melhor entendida considerando-se como a pontuação pode afetar o conceito de Vim do que delimita uma palavra.

No caso deste exemplo de texto:

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

wfelizmente pulará para a primeira letra de cada palavra na primeira linha, pois só há espaço para negociar. Ele falhará mal na linha 2 com a pontuação, surgindo nas primeiras letras de cada palavra e nas vírgulas e traços. Para passar de uma palavra para outra na linha 2, você precisará usarShiftw 1 .

1. Mesmo assim, o Vim vê "é-nota-vírgula" como uma única palavra.

jasonwryan
fonte
1

A diferença pode ser encontrada nas páginas de ajuda internas do vim. Vamos primeiro obter uma descrição de w e W com :helpw ou:help W :

  • w [conte] palavras para a frente. | exclusivo | movimento.
  • W [conte] PALAVRAS para a frente. | exclusivo | movimento.

Agora queremos saber quais são as definições de palavra e PALAVRA. Procure o manual novamente com :help worde :help WORD, nós os encontramos.

  • Uma palavra consiste em a sequence of letters, digits and underscores, ou a sequence of other non-blank characters, separated with white space(espaços, tabulações,). Isso pode ser alterado com a opção 'iskeyword'. Uma linha vazia também é considerada uma palavra.
  • Uma PALAVRA consiste em a sequence of non-blank characters, separated with white space. Uma linha vazia também é considerada uma PALAVRA.
user9154844
fonte