正则表达式 – Vim:在光标处测试模式的最有效方法?
发布时间:2020-12-14 05:59:34 所属栏目:百科 来源:网络整理
导读:我在Vim缓冲区中匹配文本时遇到问题.我的文本中有一个特定的日期形式,通常需要测试光标处的文本是否与日期模式匹配. 以下是格式化日期的一些示例,可以在同一行上的其他文本之前或之后: 2011-10-13 Wed[2011-10-13 Wed]2011-10-13 Wed +1[2011-10-13 Wed +1]
我在Vim缓冲区中匹配文本时遇到问题.我的文本中有一个特定的日期形式,通常需要测试光标处的文本是否与日期模式匹配.
以下是格式化日期的一些示例,可以在同一行上的其他文本之前或之后: <2011-10-13 Wed> [2011-10-13 Wed] <2011-10-13 Wed +1> [2011-10-13 Wed +1] <2011-10-13 Wed 10:30> [2011-10-13 Wed 10:30] <2011-10-13 Wed 10:30-11:30> [2011-10-13 Wed 10:30-11:30] <2011-10-13 Wed 10:30 +1w> [2011-10-13 Wed 10:30 +1w] 我有一些代码在光标位置测试以查看光标是否在某个日期,如果是,那么日期文本是什么,但我正在做的事情似乎有点笨拙. 有关在光标下返回日期的最有效函数的任何注释(如果没有在日期,则为空字符串)? (我会发布我的代码,但现在不会因为尴尬和(2)避免通过建议针对问题的特定方法来污染你的思想.) 谢谢你的任何提示. 解决方法function! CheckDate(expr) let date_pattern = '[[<]' " The first < or [ .'d{4}-d{2}-d{2}' " YYYY-MM-DD .' (Mon|Tue|Wed|Thu|Fri|Sat|Sun)' " Week day .'( d{2}:d{2}(-d{2}:d{2})?)?' " Optional time or range .'( +dw?)?' " Optional + digit with optional 'w' .'([]>])' " The closing > or ] return match(a:expr,date_pattern) != -1 endfunction function! IsOverDate() call setreg('a','') call setreg('b','') normal! "aya> let expr1 = getreg('a') normal! "bya] let expr2 = getreg('b') if CheckDate(expr1) return expr1 elseif CheckDate(expr2) return expr2 endif return '' endfunction 函数IsOverDate()清除寄存器a和b,并在相应的寄存器中存储光标下面的文本<和>和<和>,包括括号.然后,它从寄存器a和b中获取值并将其发送到函数CheckDate(),该函数检查表达式是否与日期模式匹配(我已将自己基于您的样本并做出一些假设来构建模式). 仅当表达式与日期模式匹配时,CheckDate()函数才返回true.函数IsOverDate()返回光标下的日期(带括号)或者如果光标不在日期上则返回空字符串. 我希望它适合. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |