如何将缩写日期扩展为完整日期?

时间:2017-04-25 09:50:45

标签: vim

我使用vim进行会计核算。我希望能够在这样一行的开头输入日期:

4/3

然后,在按下space后,将其自动扩展为:

2017/04/03

在vim中实现此目的的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

inoremap <expr>正是您要找的。 printfsubstitute可以帮助您构建日期时间格式。把它们放在一起:

inoremap <expr> <space> match(getline('.'), '\v^\d\d?/\d\d?') == -1? " ": '<Esc>v0s'.substitute(getline('.'), '\v^(\d\d?)/(\d\d?)', "\\=printf('%s/%.2d/%.2d',strftime('%Y'),submatch(1),submatch(2))","")

一个小小的演示:

enter image description here

答案 1 :(得分:2)

也许存在更好的方法,但是在查找和替换之后会执行的技巧(并且您可以随时为其创建映射)

:%s#\v^(\d{1,2})/(\d{1,2})#\=printf('%4s/%1.2d/%2.2d', strftime('%Y'), submatch(1), submatch(2)

细分 (编辑:kudo&#39;到罗兰)

%s#              
   - Starts a find and replace. Use # as separator

\v^(\d{1,2})/(\d{1,2})   
   - Search from the start of the line for one or two digits, folowed by a /, followed by a one or two digits.

\=printf('%4s/%1.2d/%2.2d', strftime('%Y'), submatch(1), submatch(2)) 
   - Replace matched items using a formatstring, padding zero's if necessary. Insert the current year with `strftime`.