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

15

Estou vendo os comandos quickref do vim help para mover o cursor. As linhas seguintes me confundem porque acho as duas trabalhando juntas. Alguém poderia me explicar a diferença com um exemplo?

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

A mesma pergunta é válida para e e E também.

    
por rahul.deshmukhpatil 24.12.2013 / 01:07

3 respostas

27

De acordo com essa folha de dicas , ela parece se resumir a 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

demousandoW

Observe na primeira demonstração como quando w é pressionado continuamente para que o cursor caia na pontuação, enquanto na segunda demonstração a pontuação é ignorada. Essa é a diferença entre os comandos minúsculos e seus equivalentes maiúsculos.

    
por 24.12.2013 / 01:30
4

Na verdade, é bem simples, w simplesmente pula para a próxima palavra, mas qualquer tipo de pontuação ou espaço em branco divide as palavras. W é como o comando next-word de força industrial, as palavras só são delimitadas por espaço em branco, seja tabulação, espaço ou nova linha. w para na pontuação delimitadora também, caso você queira lidar com isso.

Acho a diferença mais útil com nomes de host:

birdman.cartoons.fictional.com # Fictional host

Com w , você pára em cada parte do nome do host e dos pontos. W apenas ignora todo o nome do host e vai para o # . Esses dois também se aplicam a d e c para excluir e alterar palavras.

Se posicionado no início da linha acima, se você quiser substituir birdman.cartoons por outra coisa, use 3cw para substituir as duas primeiras partes e o ponto no meio. Você não poderia fazer isso com W sem digitar novamente o nome do host inteiro.

    
por 24.12.2013 / 04:34
2

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

No caso deste texto de exemplo:

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

w pulará alegremente 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, descendo nas primeiras letras de cada palavra e as vírgulas e en traços. Para passar de palavra em palavra na linha 2, você precisaria usar Shift w 1 .

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

    
por 24.12.2013 / 01:50

Tags