tutorial metrologia limpiador descargar commands comandos vim scripting automation code-snippets

metrologia - vim python



Tarea de tareas comunes en Vim (4)

Personalmente, y tal vez en parte porque estaba usando Unix mucho antes de que existiera vim (diablos, la primera versión de Unix que usé tampoco tenía "vi", pero esa es otra historia), normalmente usaría un ''script de shell'' ( o, más probablemente, un script de Perl) para hacer la transformación. Para convertir los datos CSV a INSERT, tratar las comillas / no comillas y las comas incrustadas con total generalidad es complicado: probablemente pretendo utilizar un script Perl con Text :: CSV_XS para garantizar un análisis correcto. Luego, ejecutaba ese script en el rango de texto que necesitaba conversión.

Una ventaja de esto es el enfoque de herramienta enfocada: una herramienta hace un trabajo correcto. Mi directorio bin privado tiene 300 o más scripts y programas; el directorio RCS tiene más de 500 scripts en él.

Esto no quiere decir que el scripting en vim sea malo. Uso (más o menos) comandos de mapas complejos para escribir manipulaciones complejas, a menudo cuando estoy a punto de tener que hacer el mismo cambio en un conjunto de archivos, y cuando no creo que valdrá la pena crear un script para el trabajo. Sin embargo, si creo que podría necesitar los cambios más de una vez, lo guiaré. Por ejemplo, GCC comenzó a mostrarse optimista (circa 2005) sobre no incrustar cadenas estáticas no utilizadas en archivos de objeto, lo que significaba que mi información de control de versión no era visible. Entonces, durante un período de años, mientras edito los archivos fuente, he convertido de un nombre estático (fijo) a un nombre público: de mala gana, pero necesariamente AFAIAC. Tengo un script que hace eso para mí, así que cuando necesito hacer el cambio en un archivo, ejecuto ese script para hacerlo. Tengo otra secuencia de comandos que actualiza la información de copyright; Lo necesito cada vez que modifico un archivo en un año determinado. Sí, probablemente podría esconderlo como algo en vim - crecí pensando que el guión separado es mejor, sobre todo porque si cambio a otro editor, aún puedo usar el guión.

Mientras uso Vim (en casa y en el trabajo), a menudo me encuentro haciendo cosas similares repetidamente. Por ejemplo, puedo convertir un montón de texto CSV en una serie de inserciones SQL. He estado usando Vim durante años, pero solo recientemente he tratado de pensar seriamente sobre cómo puedo mejorar mi productividad mientras lo uso.

Mi pregunta es ... ¿Hay una buena manera (o correcta) de almacenar comandos o secuencias de comandos comúnmente utilizados? ¿Y cómo es la mejor forma de ejecutarlos? Sería bueno poder usar el mismo script en una sesión en vivo y también sobre la línea de comando en contra de algún archivo.

Espero poder almacenarlos en un archivo .vim para poderlos entregar a mis compañeros de trabajo (que no son tan hábiles con vim) para que lo usen.


Puede almacenar secuencias de comandos en su .vimrc y asignarles un enlace de clave con el comando :map . Por ejemplo:

echo >>~/.vimrc ":map ,c :%s/,/'',''/g<CR>:%s/^/(''/g<CR>:%s/$/''),/g<CR>"

Al presionar " ,c " en una sesión en vivo, esto convertirá su archivo CSV en una parte de una declaración INSERT.

En la línea de comandos, se puede aplicar la misma edición a un archivo (esto se sobrescribirá, asegúrese de hacer una copia de seguridad primero):

vim file.txt -c '':normal ,c | :x''

Puede haber una manera mejor, pero esto funciona.


Puede almacenar sus macros de tareas comunes en archivos .vim, como este por ejemplo, y luego puede cargarlos con el comando : entonces file.vim

Aquí puedes encontrar un montón de macros útiles, también te recomiendo que aprendas bien el útil comando de grabación macro q , es muy poderoso ...

Las macros creadas con el comando q se almacenan en un registro, qq almacena la macro en el registro q, de modo que cuando termine la grabación, simplemente pegue la macro, con "qp y guárdela , luego puede cargarla simplemente tirando la macro en un registro, es decir: "qY , las macros son solo texto y recuerda que puedes usar cualquier registro en lugar de q. Hay un script de Vim para almacenar macros q :

marvim: Macro Persistent Storage y Shareable Repository para VIM

También eche un vistazo al lenguaje de scripting de Vim .


Uso q / @ para grabar / reproducir una macro con bastante frecuencia.

El siguiente paso es intentar escribir algo así como 3 o menos comandos ex.

Si algo tan complejo que ni una macro ni una corta ex secuencia no será suficiente, tiendo a escribirlo como un script Perl en su lugar. El lenguaje de la secuencia de comandos de vim es demasiado limitado para tratar de hacer grandes cosas, para mi gusto. (Aunque vim 7 ha hecho grandes avances en ese sentido, tomando prestadas muchas cosas de Python).

Tenga en cuenta que @ hace algo muy simple: toma los contenidos de un registro y los reproduce como si los hubiera escrito en modo normal. Del mismo modo, simplemente registra la secuencia que está escribiendo en el registro que nombre. Estos son los mismos registros que usas para tirar / poner, lo que significa que puedes pegar directamente una secuencia grabada en un archivo ( .vimrc alguien lo puede .vimrc ?) O tirar de una secuencia de comandos de un archivo y reproducirla (para que puedas mantener un muchos de ellos en ~/my-vim-macros.txt o algo así).