¿Es posible ejecutar comandos de limpieza solo para líneas editadas?


8

Refiriéndose a tareas de limpieza como (pero no limitado a) las detalladas en estas preguntas:

¿Hay alguna manera de aplicar esos comandos solo a las líneas de los archivos que realmente se modificaron? Esto es para mantener el resultado diferencial centrado en el cambio real después de editar el código fuente (un posible revisor de código no se confundiría con los cambios involucrados en la limpieza de todo el archivo), sin introducir nuevos problemas de formato.


vim.wikia.com/wiki/… ... Podría ser un buen lugar para comenzar ... No hay tiempo para escribir una respuesta completa ahora ;-)
Martin Tournoij

@Carpetsmoker thx para el enlace
guido

Investigué un poco más y no creo que esto sea posible. :changesno funciona sin mucha piratería; ya que parece que esta información se almacena en el archivo viminfo, y no hay forma de ver qué cambios realizó en esta sesión y cuál la anterior ... A menos que desactive el archivo viminfo, por supuesto, pero eso es bastante pesado ... Sin embargo, me gustaría que se demuestre lo contrario aquí :-)
Martin Tournoij

@Carpetsmoker No creo que la lista de cambios contenga suficiente información para implementar esta función, incluso si pudiera aislar los cambios realizados en cada sesión. Contiene una sola posición del cursor para cada cambio, por lo que no puede saber el alcance de la edición que se realizó.
Rico

@ Rich Sí, llegué a la misma conclusión ...
Martin Tournoij

Respuestas:


4

Puede usar el comando folddoopenpara ejecutar un comando solo en las líneas que no están dentro de un pliegue cerrado.

Por ejemplo, puede eliminar espacios en blanco del final de las líneas con el comando:

:%s/\s\+$//

Para aplicar esto solo a las líneas que actualmente no están dentro de un pliegue cerrado, agregue folddopen, así:

:%folddoopen s/\s\+$//

folddoopentambién se puede abreviar a foldd.

Si está utilizando Vim como la herramienta de diferencias de su control de origen, puede usar esto para aplicar ediciones solo a las líneas cambiadas mientras visualiza la diferencia.

Tenga en cuenta que, por defecto, el modo diff de Vim muestra algunas líneas antes y después de cada sección modificada. Así que con el fin de no afectar a las líneas que son inmediatamente antes o después de líneas cambiadas que necesitará para primer conjunto contexten diffoptque 0por ejemplo:

:set diffopt=filler,context:0

Para las ediciones manuales, también puede encontrar la foldopenopción útil. Define qué tipos de comandos harán que se abran los pliegues. Aunque tenga en cuenta que no impide que la edición tenga lugar dentro de los pliegues de la manera en que lo hace el folddoopencomando.

(Si quiere decir algo más por "las líneas de los archivos que realmente se modificaron", entonces tendrá que encontrar una forma de plegar las líneas sin cambios antes de ejecutar el comando: la forma más fácil es mantener una copia sin cambios del archivo y use vimdiff manualmente.)


2
Esta es una idea muy creativa! No lo sabía :folddoopen, parece un comando muy útil. También quería ofrecer que si usa fugitive.vim , puede ver más fácilmente la diferencia de su búfer actual con el :Gdiffcomando.
tommcdo

Esto funciona muy bien; Puedo abrir un búfer de memoria virtual con la revisión anterior diferida a la actual con :vsp new, luego :read !git show HEAD~1:pathy finalmente :windo diffthis(y luego usando su solución).
guido
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.