Vim执行date命令插入格式化日期时%被替换为文件路径怎么办
问题原因
Vim执行!引导的外部Shell命令时,默认会自动展开命令中的特殊关键字:其中%会被直接替换为当前编辑文件的完整路径,因此原命令里%a %d %b %Y中的%全被替换成了文件路径,最终输出完全错乱。
解决方法
可任选以下两种方案实现需求:
方案1:转义
%字符,阻断Vim的自动展开
在命令中每一个%前加反斜杠\,告知Vim该字符是普通字符、不需要做路径替换,修改后的命令如下::0r !date '+\%a, \%d \%b \%Y'执行后即可在文件开头(第0行位置)插入格式为
Mon, 1 Jan 2022的系统日期。方案2:使用Vim内置时间函数,完全规避外部命令展开问题
不需要调用系统date命令,直接用Vim原生的strftime()函数处理日期格式化,不存在特殊字符被展开的问题,跨平台兼容性更好(Linux、macOS、Windows下的Vim均可正常使用),命令如下::0r =strftime('%a, %d %b %Y')
补充说明
如果不需要固定把日期插入到文件最开头,而是要插入到光标当前所在位置,只需要把上述命令开头的0删掉即可,例如:
" 光标位置插入(转义外部命令版) :r !date '+\%a, \%d \%b \%Y' " 光标位置插入(内置函数版) :r =strftime('%a, %d %b %Y')
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

