我使用vim进行会计核算。我希望能够在这样一行的开头输入日期:
4/3
然后,在按下space
后,将其自动扩展为:
2017/04/03
在vim中实现此目的的最佳方法是什么?
答案 0 :(得分:3)
inoremap <expr>
正是您要找的。 printf
和substitute
可以帮助您构建日期时间格式。把它们放在一起:
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))","")
一个小小的演示:
答案 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`.