2011-10-17 28 views
5

Hay un tipo de finalización que no figura en los archivos de ayuda de vim (en particular: insert.txt), pero que instintivamente siento la necesidad con bastante frecuencia. Digamos que tengo las palabras "Awesome" y "SuperCrazyAwesome" en mi archivo. Encuentro una instancia de Awesome que realmente debería ser SuperCrazyAwesome, así que salto al comienzo de la palabra, ingrese el modo de inserción, y luego debo escribir "SuperCrazy".finalización interna de código en vim

Siento que debería ser capaz de escribir "S", crear "SCrazy", y luego simplemente presionar una tecla de acceso rápido o dos para que encuentre lo que está a la izquierda del cursor ("S"), lo que es right ("Crazy"), regebre esto contra todas las palabras en el archivo ("/ S \ w * Crazy /"), y bríndeme un menú emergente de opciones de finalización, o simplemente reemplace si solo hay una coincidencia.

Me gustaría utilizar el sistema de finalización real para esto. Existe una finalización "definida por el usuario" que utiliza una función y tiene un buen ejemplo en las ayudas para el reemplazo de una lista dada. Sin embargo, parece que no puedo rastrear muchos detalles que necesitaría para que esto suceda, incluyendo:

  1. ¿Cómo obtengo una lista de todas las palabras en el archivo de una función vim?
  2. ¿Puedo hacer una lista de palabras de todos los buffers (con nombres de archivo), como lo hace vim?
  3. ¿Cómo puedo, en modo insertar, obtener el texto en la palabra antes/después del cursor?
  4. ¿Se puede completar la palabra completa, y no solo hasta el cursor?

He estado en esto por un par de horas. Sigo llegando a callejones sin salida, como this one, que me introdujo a \% # para que coincida con la posición del cursor, que no parece funcionar para mí. Por ejemplo, una búsqueda de \ w * \% # solo devuelve el primer carácter de la palabra en la que estoy, independientemente de dónde esté. El \% # no parece anclarse.

+0

No es estrictamente relevante, pero puede obtener algunas sugerencias de [esto] (http://stackoverflow.com/questions/6548541/camelcase-expansion-in-vim-like-intellij-idea/6550628#6550628) answer. Hay funciones de ejemplo para generar una lista de palabras del archivo actual y una función de finalización personalizada. Trataré de publicar una respuesta más tarde hoy. –

+0

Tu enlace parece interesante y rico en datos. Voy a excavar a través de eso. Gracias por tu ayuda. –

Respuesta

0

Aunque no está exactamente siguiendo su método deseado en el pasado he escrito https://github.com/mjbrownie/swapit que podría realizar su tarea si está buscando palabras clave relacionadas. Caería en este escenario si tienes cientos de partidos.

Es principalmente útil para 2-10 posibles coincidencias secuenciadas.

Se podría definir una lista

: SwapList awesomes impresionante MoreAwesome SuperCrazyAwesome FullyCompletelyAwesome UnbelievablyAwesome

y moverse a través de los partidos con las teclas incrementador decrementador (c + a) (c + x)

Hay También hay algunos otros complementos de ciclismo, como las palabras de intercambio que conozco en vim.org y github.

La ventaja aquí es que no tiene que agrupar palabras junto con expresiones regulares.

+0

Gracias por el enlace, Michael. Tendré que echarle un vistazo. ¿Has visto las cosas para completar el tesauro que viene con vim? Me encontré con esto hoy en mi búsqueda para resolver los problemas que enumeré. Te permite definir palabras relacionadas, creo que en un tipo de archivo de sinónimos, y luego combinarlas con las teclas de acceso normales /. –

+0

Tenía pero realmente no pensé en usarlo para bibliotecas de códigos. Buena idea. Es posible que aún encuentre swapit útil para la refactorización ad hoc, donde dice que está pasando por un archivo de configuración e intercambiando SomeKeyword por AnotherKeyword para ver algunas, pero no todas, palabras clave. Usted acaba de configurar la lista go/Keyword e ir (c + a) ... n ... n.n..n. (C + a) cuando sea necesario sin necesidad de agregar la lista al archivo. – michael

+0

Parece que definitivamente podría ayudar. ¡Gracias! –

0

Escribí algo así hace años cuando trabajaba con bibliotecas de terceros con CamelCasePrefixes bastante largos en cada función diferente para cada componente. Pero fue en la era Before Git Hub y la consideré una joya perdida, pero el motor de búsqueda dice que no soy un completo asno y lo publiqué en la wiki de Vim.

aquí está: http://vim.wikia.com/wiki/Custom_keyword_completion

Simplemente no me pregunten lo que significa 'MKW'. Ni idea.

Esto necesitará una adaptación a sus necesidades, ya que solo busca la palabra hasta el cursor, pero la idea está allí. Funciona solo para el búfer en uso. Iterar a través de todos los buffers sería lento ya que no está creando ningún índice. Para esos fines, iría con grep externo.

Cuestiones relacionadas