Neovim Ultisnips调用strftime生成时间戳持续变动问题求解
问题原因
该问题是Ultisnips的默认表达式求值逻辑导致的:你当前使用的!v前缀属于动态求值标识,只要你还处于当前片段的编辑流程(未完成所有占位符跳转、未退出片段编辑状态),每次占位符切换、内容修改时都会重新执行对应的Vim表达式,反复调用strftime获取最新时间,因此时间戳会持续变动。
解决方案
将动态求值改为仅在片段插入时执行一次的静态求值即可,以下是两种可行方案:
方案1:使用Python块一次性求值(兼容性最好,推荐)
把时间戳行替换为以下写法,求值逻辑仅在片段首次插入缓冲区时执行一次,生成的时间会作为普通文本保留,后续不会再更新:
created: `!p import time; snip.rv = time.strftime("%d.%m.%y %H:%M:%S")`
方案2:给Vim表达式加单次求值标记
如果不想使用Python写法,可直接在原表达式的!v后加!标识,标识该表达式仅在插入时执行一次:
created: `!v! strftime("%d.%m.%y %H:%M:%S")`
完整修正后的代码片段
/** * author: kartikPant23 * created: `!p import time; snip.rv = time.strftime("%d.%m.%y %H:%M:%S")` **/ #include <bits/stdc++.h> using namespace std; int main () { $1 return 0; }
额外提示:你原片段中的头文件拼写有误,
<btis/stdc++.h>应修正为<bits/stdc++.h>。
内容的提问来源于stack exchange,提问作者Kartik Pant
相关产品推荐
相关产品推荐

