![如何让 vim 更改文件某部分被编辑的日期?](https://linux22.com/image/1338421/%E5%A6%82%E4%BD%95%E8%AE%A9%20vim%20%E6%9B%B4%E6%94%B9%E6%96%87%E4%BB%B6%E6%9F%90%E9%83%A8%E5%88%86%E8%A2%AB%E7%BC%96%E8%BE%91%E7%9A%84%E6%97%A5%E6%9C%9F%EF%BC%9F.png)
我使用 latex 作为日记,每个主题都有部分。我手动将创建和修改日期添加到每个文本元素(部分、小节、小小节,...)。有没有办法让它自动化?
我愿意学习 lua 或 python 并编写代码(我使用现代 C++),但我不确定有哪些可用的工具以及如何使其快速运行。
我的计划是让它从前一个文本元素声明开始一直到下一个元素声明。可以在撤消树中查看。看看是否有任何变化。如果有,则在当前部分声明后更改日期。隐藏这些日期并显示回来也很好。
答案1
这是可行的,但需要您对 Vim 的脚本语言有一定的了解。您需要编写一个 Vim 函数,该函数可以在当前部分内找到日期的位置,而无需“转义”该部分,然后更改该行。编写完函数后,您需要将其附加到自动命令。
例如,如果您的函数被调用,TexAutoDate()
您可以在每次写入.tex
以此方式结尾的文件时自动调用它:
:autocmd BufWritePre *.tex :call TexAutoDate()
不幸的是,函数的实际主体将相当复杂,如果不了解您的文件布局,我无法为您提供太多帮助。我确实有一个为类似目的编写的函数,但它并不局限于部分。以下函数在写入时自动更新 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
看:
:help :autocmd
:help :function
:help eval.txt
最后一部分内容很广泛,您不需要读完整个文件,但如果您还不了解 Vim 脚本,它将包含您需要的大部分内容。