¿Cuál es la diferencia entre w y W en el modo de escape de vim?

19

Estoy mirando los comandos vim help quickref para mover el cursor. Las siguientes líneas me confunden porque encuentro que ambas funcionan igual. ¿Podría alguien explicarme la diferencia con un ejemplo?

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

La misma pregunta es verdadera para e y E también.

rahul.deshmukhpatil
fuente

Respuestas:

34

Según esta hoja de trucos , parece que se reduce a la puntuación.

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)

Ejemplo

demostración usando w

          ss de w

demostración usando W

          ss de W

Observe en la primera demostración cómo, cuando wse pulsa continuamente, que el cursor cae sobre la puntuación, mientras que en la segunda demostración se omite la puntuación. Esta es la diferencia entre los comandos en minúsculas y sus equivalentes en mayúsculas.

slm
fuente
@slm: muchas gracias por una demostración tan genial. con tal demostración no es necesario leer ans también
rahul.deshmukhpatil
5

En realidad es bastante simple, wsimplemente salta a la siguiente palabra, pero cualquier tipo de puntuación o espacio en blanco divide las palabras. Wes como el comando de la siguiente palabra de fuerza industrial, las palabras solo están delimitadas por espacios en blanco, ya sea tabulación, espacio o nueva línea. wtambién se detiene en la puntuación delimitadora, en caso de que quiera lidiar con eso.

Encuentro la diferencia más útil con los nombres de host:

birdman.cartoons.fictional.com # Fictional host

Con w, se detiene en cada parte del nombre de host y los puntos. Wsimplemente omite todo el nombre de host y pasa al #. Ambos también se aplican a dy cpara eliminar y cambiar palabras.

Si se coloca al comienzo de la línea anterior, si desea reemplazar birdman.cartoonscon otra cosa, usaría 3cwpara reemplazar las dos primeras partes y el punto en el medio. No podría hacerlo Wsin volver a escribir todo el nombre de host.

kurtm
fuente
2

Es una diferencia que se entiende mejor al considerar cómo la puntuación puede afectar el concepto de Vim de lo que delimita una palabra.

En el caso de este texto de ejemplo:

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

wsaltará felizmente a la primera letra de cada palabra en la primera línea, ya que solo hay espacio para negociar. Fallará gravemente en la línea 2 con la puntuación, desglosándose en las primeras letras de cada palabra y las comas y guiones. Para pasar de una palabra a otra en la línea 2, necesitaría usar Shiftw1 .

1. Incluso entonces, Vim ve "es-nota-coma" como una sola palabra.

jasonwryan
fuente
1

La diferencia se puede encontrar en las páginas de ayuda interna de vim. Primero obtengamos una descripción de w y W con :helpw o :help W:

  • w [contar] palabras hacia adelante. | exclusivo | movimiento.
  • W [cuenta] PALABRAS adelante. | exclusivo | movimiento.

Ahora queremos saber cuáles son las definiciones de palabra y PALABRA. Busque el manual nuevamente con :help wordy :help WORD, los encontramos.

  • Una palabra consiste en a sequence of letters, digits and underscores, o a sequence of other non-blank characters, separated with white space(espacios, tabulaciones,). Esto se puede cambiar con la opción 'iskeyword'. Una línea vacía también se considera una palabra.
  • Una PALABRA consiste en a sequence of non-blank characters, separated with white space. Una línea vacía también se considera una PALABRA.
usuario9154844
fuente