¿Cómo abrir todos los archivos que tienen TODO en gvim?

Quiero abrir todos mis archivos fuente, que tienen TODO en ellos, en búferes divididos en gvim.

Estoy bastante seguro de que esto podría hacerse con un grep que canaliza su salida al comando de edición, pero no estoy seguro de cómo implementar esto.

preguntado el 03 de mayo de 12 a las 13:05

¿De cuántos archivos estás hablando? Puede ser un poco poco práctico tener algo así como 30 divisiones en la misma pantalla:

4 Respuestas

No los abriría divididos, a menos que sepas que solo hay dos o tres. Pero si solo hay dos o tres archivos para editar, ¿por qué está buscando un comando para automatizar su apertura, después de todo?

Este es el grep básico que puedes usar:

grep -lIr TODO .

Busca en el directorio actual recursivamente los archivos que contienen TODO y enumerarlos. También evita la coincidencia de archivos binarios (incluidos los archivos .swp y .swo). Entonces, si está ejecutando un GUI Vim, iría con:

mvim --remote-silent $(grep -lIr TODO .)

O, dentro de Vim, puede usar el :argadd Comando y expansión de comillas invertidas como lo sugiere inteligentemente sehe en los comentarios:

:args `grep -Ilr TODO .`

contestado el 04 de mayo de 12 a las 14:05

Tr también puede ser paste -sd' ' - Daenyth

Tu puedes sólo :args `grep -Ilr TODO .` (para abrir/mostrar todos inmediatamente, :sall or :tab sall etc) - seje

@sehe Hmm, ¿por qué simplificar si puedes complicar? :-) No recordaba el uso de acentos graves en este caso, y la cadena evaluada con saltos de línea no funcionaría bien con :exec, así que se me ocurrió la tubería para tr. - Sidyll

En realidad, hay una función en vim que probablemente hace lo que usted quiere mucho mejor de lo que realmente pidió. Verificar :help quickfix. Esencialmente, puedes realizar tu grep como te imaginas:

grep -rn TODO . > index.txt

Luego puede abrir este índice en la lista rápida de vim:

vim -q index.txt

Esto le permitirá navegar a través de TODO en todos esos archivos haciendo :cn (siguiente) y :cp (anterior). También es posible :copen que abre la ventana de lista rápida en la parte inferior que le muestra dónde se encuentra en la lista completa y le permite navegar a cada TODO en cualquier archivo.

contestado el 03 de mayo de 12 a las 15:05

Crear un archivo parece innecesariamente desordenado. Prueba esto: stackoverflow.com/a/62984648/1450294 - Michael Scheper

Puede usar el xargs:

grep -l TODO * | xargs vim -o

contestado el 03 de mayo de 12 a las 13:05

esto tiende a estropear la terminal ya que vim se ejecuta en una subcapa, no conectada a la terminal. Al menos, usa xargs gvim -o o similar - seje

No ha indicado qué sistema operativo y shell está utilizando. Pero asumiendo que estás usando algo bash-como, esto debería funcionar:

vim -o $(grep -lr TODO .)

Sin embargo, tenga cuidado si su directorio de trabajo actual es un repositorio git o algo así, porque esto incluirá archivos allí. Y dependiendo de cómo haya configurado vim, también puede obtener archivos de intercambio antiguos. Para evitar esto, tengo un alias a grep, con un racimo' --exclude y --exclude-dir argumentos p.ej:

alias gg='grep --exclude='\''*.sw?'\'' --exclude-dir='\'.git\'

Respondido 19 Jul 20, 20:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.