È possibile eseguire comandi di pulizia solo per le linee modificate?


8

Riferendosi ad attività di pulizia come (ma non limitato a) quelle dettagliate in queste domande:

c'è un modo per applicare quei comandi solo alle righe dei file che sono stati effettivamente modificati? Questo per mantenere l'output diff focalizzato sulla modifica effettiva dopo aver modificato il codice sorgente (un potenziale revisore del codice non sarebbe confuso dalle modifiche coinvolte nella pulizia dell'intero file), senza introdurre nuovi problemi di formattazione.


vim.wikia.com/wiki/… ... Potrebbe essere un buon punto di partenza ... Non c'è tempo per scrivere una risposta completa ora ;-)
Martin Tournoij

@Carpetsmoker thx per il link
guido

Ho scavato un po 'di più e non credo sia possibile. :changesnon funziona senza un sacco di pirateria informatica; poiché sembra che queste informazioni siano memorizzate nel file viminfo, e non c'è modo di vedere quali modifiche hai apportato a questa sessione e quale la precedente ... A meno che tu non disabiliti il ​​file viminfo ovviamente, ma è piuttosto pesante ... vorrei essere
smentito

@Carpetsmoker Non credo che l'elenco delle modifiche contenga abbastanza informazioni per implementare questa funzione, anche se è possibile isolare le modifiche apportate in ogni sessione. Contiene una singola posizione del cursore per ogni modifica, quindi non puoi dire l'estensione della modifica che è stata effettuata.
Ricco

@Rich Sì, sono arrivato alla stessa conclusione ...
Martin Tournoij,

Risposte:


4

È possibile utilizzare il comando folddoopenper eseguire un comando solo sulle linee che non si trovano all'interno di una piega chiusa.

Ad esempio, puoi rimuovere gli spazi bianchi dalla fine delle righe con il comando:

:%s/\s\+$//

Per applicare questo solo alle linee che attualmente non si trovano all'interno di una piega chiusa, aggiungi folddopen, in questo modo:

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

folddoopenpuò anche essere abbreviato in foldd.

Se stai usando Vim come strumento diff del controllo del codice sorgente, puoi utilizzarlo per applicare le modifiche solo alle linee modificate mentre visualizzi il diff.

Si noti che per impostazione predefinita, la modalità diff di Vim mostra alcune righe prima e dopo ogni sezione modificata. Quindi, al fine di non pregiudicare le linee che sono immediatamente prima o dopo le linee modificate che dovrete primo set contextin diffopta 0esempio:

:set diffopt=filler,context:0

Per le modifiche manuali, potresti anche trovare utile l' foldopenopzione. Definisce quali tipi di comandi faranno aprire le pieghe. Sebbene si noti che non impedisce la modifica all'interno delle pieghe nel modo in cui il folddoopencomando fa.

(Se intendi qualcos'altro con "le righe dei file che sono state effettivamente modificate", dovrai trovare un modo per piegare le righe invariate prima di eseguire il comando: il modo più semplice è mantenere una copia invariata del file e utilizzare vimdiff manualmente.)


2
Questa è un'idea molto creativa! Non sapevo :folddoopen, sembra un comando molto utile. Volevo anche offrire che se si utilizza fugitive.vim , è possibile vedere più facilmente il diff del buffer corrente con il :Gdiffcomando.
Tommaso

Funziona bene; Posso aprire un buffer di memoria virtuale con la revisione precedente diversa dalla corrente con :vsp new, quindi :read !git show HEAD~1:pathe infine :windo diffthis(e quindi utilizzando la soluzione).
guido,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.