Mi piace il comando '.
in vim. Da :help '.
:Impedisci a Vim di ricordare una modifica
'. `.
[Vai a] la posizione in cui è stata fatta l'ultima modifica. La posizione è ao vicino a dove è iniziata la modifica.
Ok. Ma ecco il mio problema: utilizzo una funzione autocmd
per aggiungere una riga "last modified" nell'intestazione del mio file. Quindi, dopo ogni scrittura, '.
non mi porta alla mia "vera" ultima modifica, ma alla mia intestazione del file. La mia soluzione attuale è che cerco di ricordare di contrassegnare il mio attuale punto di modifica con ma
, così posso 'a
per tornare ad esso. A volte mi dimentico, però, e anche quando ricordo, si tratta di un altro paio di sequenze di tasti.
La mia soluzione ideale sarebbe una sorta di comando che dice di non ricordare i movimenti. Potrei inviare questo comando prima che la funzione autocmd
salti, scrivendo l'ultima riga modificata e quindi la annulli dopo che la funzione autocmd
è terminata. In questo modo, la posizione associata a '.
non verrà modificata. Tuttavia, sono aperto a qualsiasi altra opzione che sia più efficiente.
Nel caso in cui si desideri vederlo, ecco cosa fa il autocmd
.
function! UpdateHeader()
let b:winview = winsaveview()
" This is where I'd put the command to ignore future movements
"The periods concatenate all the arguments into one command.
"Silent! suppresses errors, usually 'pattern not found'
"The 1,6g means search only lines 1 thru 6
"Search for File Name: followed by anything
"'s'ubstitute
"Substitute in 'File Name: ' and the results of the expand command, on the
"current filename
execute "silent! 1," . 6 . "g/File Name:.*/s//File Name: " . expand("%")
execute "silent! 1," . 6 . "g/Last Modified:.*/s//Last Modified: " . strftime("%d-%m-%Y")
" This is where I'd put the command to start remembering movements again
call winrestview(b:winview)
endfunction
Perfetto. Grazie. – ravron
Una nota per chiunque cerchi di implementare questa soluzione: il comando 'keepjumps' è necessario dove avviene * la modifica effettiva del testo * - cioè, nel comando': s' eseguito dal comando ': g':' execute " silenzioso! 1, ". 6. "g/Nome file:. */keepjumps s // Nome file:". ampliare ("%") '. – ravron
Ancora una nota: il comando, come scritto nel commento precedente, impedisce che ''.' venga impostato. Tuttavia, aggiunge ancora al jumplist. Per prevenire * that *, aggiungi 'keepjumps' di nuovo, subito dopo' silent! '. – ravron