Comment faire que vim change une date quand une section d'un fichier a été modifiée?

1

J'utilise le latex comme journal avec des sections pour chaque sujet. J'ajoute manuellement la date de création et de modification de chaque élément de texte (section, sous-section, sous-section, ...). Y a-t-il un moyen de le rendre automatique?

Je suis disposé à apprendre Lua ou Python et à le coder (j'utilise le C ++ moderne), mais je ne suis pas sûr des outils disponibles ni de la rapidité avec laquelle il est disponible.

Mon plan est de le faire apparaître à partir de la déclaration de l'élément de texte précédent et jusqu'à la déclaration de l'élément suivant. peut être regarder dans l'arbre défaire. voir s'il y a des changements. s'il y a que changer la date après la déclaration de la section actuelle. il serait également agréable de cacher ces dates et de les leur rendre.

kirill_igum
la source

Réponses:

1

C'est possible, mais cela nécessitera que vous connaissiez un peu le langage de script de Vim. Vous devrez écrire une fonction Vim capable de trouver l'emplacement de la date dans la section en cours sans "échapper" à cette section, puis de modifier cette ligne. Une fois la fonction écrite, vous devrez l’attacher à un autocmd.

Par exemple, si votre fonction a été appelée, TexAutoDate()vous pouvez l'appeler automatiquement chaque fois que vous écrivez un fichier se terminant par .tex:

:autocmd BufWritePre *.tex :call TexAutoDate()

Malheureusement, le corps de la fonction sera assez complexe et sans en savoir plus sur la structure de votre fichier, je ne peux pas vous aider beaucoup. J'ai une fonction que j'ai écrite dans un but similaire, mais elle ne se limite pas à des sections. La fonction suivante met à jour automatiquement la ligne "Dernier changement:" d'un fichier d'aide Vim:

function HelpModifiedUpdate()
    if &filetype != "help"
        return
    endif

    let today=strftime('%Y %b %d')

    " Save current cursor position:
    let lnum = line('.')
    let col  = col('.')

    if search('Last change: ', 'w')
        let line1 = getline('.')
        if line1 =~ today
            " Restore cursor position:
            call cursor(lnum, col)
            return
        endif
        let line2 = substitute(
            \line1,
            \'Last change: .*',
            \'Last change: ' . today,
            \''
        \)
        call setline('.', line2)
    endif

    " Restore cursor position:
    call cursor(lnum, col)
endfunction

Voir:

:help :autocmd
:help :function
:help eval.txt

Le dernier est vaste et vous n’aurez pas besoin de lire tout le fichier, mais il contiendra une grande partie de ce dont vous avez besoin si vous ne connaissez pas déjà le script Vim.

Heptite
la source
0

Le moyen le plus simple de procéder consiste probablement à installer un plugin d'extrait de code. Je préfère ultisnips car il est beaucoup plus puissant, mais snipmate est également très populaire.

Avec ultisnips, je définirais un extrait tel que celui-ci dans mon tex.snippetsfichier;

snippet sec "section" b
\section{`!v strftime("%Y-%m-%d")`: ${1:section label}}

$0
endsnippet

Si vous tapez maintenant secau début d'une ligne et appuyez sur la <tab>touche, l'extrait de code se développera en insérant la date du jour (à l'aide de la fonction strftime ) et en vous demandant de remplir le libellé de la section.

Roland Smith
la source
Je voulais dire que si vous modifiez la section, la date sera mise à jour. pas lorsque vous créez une section. fondamentalement, un plug-in devrait vérifier le texte dans la section pour les mises à jour. j'ai fini par utiliser git pour l'instant
kirill_igum