2010-12-28 22 views
13

Usando vim, encuentro cw muy útil para cambiar una palabra completa. Los comandos de separación de movimiento de Vim y los verbos de acción crean combinaciones muy potentes. Solo ahora tuve que cambiar DefaultHandler a ContentHandler. Naturalmente, pensé en ello como "cambiar a la siguiente letra mayúscula", pero no pude encontrar un comando de movimiento que pasara de una letra mayúscula a la siguiente.Cambiar las partes de las palabras de CamelCase en vim

En este caso, podría haber usado ctH, pero ¿hay alguna manera de cambiar (o eliminar, etc.) la primera parte de una palabra CamelCase independientemente de qué letra mayúscula viene después?

+0

posible duplicado de [¿Cómo puedo configurar Vim para que los comandos de movimiento incluirá guiones y CamelCase , pero la finalización los ignorará?] (http://stackoverflow.com/questions/1279462/how-can-i-configure-vim-so-that-movement-commands-will-include-underscores-and-c) (como se menciona en la respuesta de Luc, que creo que debería ser un comentario) – yshavit

Respuesta

2

Vim no proporciona un objeto de texto de palabra CamelCase de forma predeterminada, por lo que tendremos que crearlo nosotros mismos . La buena nueva es que no necesitamos reinventar la rueda desde un plugin ya existe y se puede utilizar como base: camelCaseMotion

Este script define movimientos ,w, ,b y ,e (similar a w, b, e), que no se mueven en palabras (hacia adelante/hacia atrás), sino en Camel-wise; es decir, límites de palabras y letras mayúsculas. El problema es que no define un objeto de texto similar a iw para seleccionar una palabra completa. Así que vamos a crear :

Para completar, un objeto de texto necesita dos definiciones: una para el modo visual y otra para el modo de operador pendiente. Aquí están nuestras definiciones (a añadir a la .vimrc):

vmap ,i <Esc>l,bv,e 
omap ,i :normal v,i<CR> 

Como se puede ver que hacemos un uso de los ,b y ,e movimientos definidos por el plugin.

La primera definición permite escribir ,i cuando estamos en modo visual y seleccionará la "palabra interna de camelCase". (El movimiento l es una solución alternativa para obtener siempre la palabra se encuentra el cursor. De otro modo se obtiene la anterior cuando el cursor está en la primera letra de una palabra)

La segunda definición utiliza el primer uno a permitir que operadores como d o c trabajo con ,i

Después instalamos el plugin y hemos añadido las definiciones de nuestra .vimrc que podemos hacer lo que quería.Por ejemplo si tomo este ejemplo:

DefaultHandlerWord 

Si mi cursor está en la letra n de Handler puedo usar:

  • ,e para ir a la última letra de Handler
  • ,b ir a la primera letra de Handler
  • ,w para ir a la primera letra de Word
  • d,i eliminar Handler y obtener sólo DefaultWord
  • c,i eliminar Hanlder y tener la oportunidad de reemplazarlo por otra palabra
+0

También para preguntas sobre Vim, los interesados ​​en el sitio de intercambio de pila dedicado (http://vi.stackexchange.com/) pueden estar interesados. – statox

Cuestiones relacionadas