我目前有以下vimscript函数来通过游标获取当前的HTML标记:
fun s:GetCurrentTag()
return matchstr(matchstr(getline('.'),
\ '<\zs\(\w\|=\| \|''\|"\)*>\%'.col('.').'c'), '^\a*')
endf
这段代码是由其他人编写的,所以我不确定它的作用。有人可以提供简短的解释。我还没能在网上找到任何好的vimscript正则表达式文档。
但是,最重要的是我想要更改此功能,以便它可以检测其中包含%
和.
的代码。
答案 0 :(得分:3)
Vim的正则表达式记录在:help pattern
下。另请参阅:help design-documented
。
从内到外,
getline('.')
将当前行作为字符串。matchstr(string, pat)
获取与模式pat匹配的字符串部分。<
匹配文字左尖括号。\zs
表示&#34;在此处开始匹配&#34;,以便<
不会被包含在内。\(...\)
创建了一个群组。\|
代表另一种选择。因此,该论坛会匹配\w
(单词字符),=
(字面意思),
(空格),'
(字面值,加倍,因为它位于&#内39;文字字符串&#39;),或"
(字面意思)。*
表示&#34;零或更多,尽可能多&#34; (贪婪)。它适用于前一项;在这种情况下,它适用于该组。>
使用文字直角括号。'\%' . col('.') . 'c'
匹配当前列。所以我认为只有在光标是结束>
之后的一个字符时才会匹配。<
之后开始,并且在结束>
之后转过一个字符)另一个matchstr()
在开始时选择字母部分。这不是我写的方式。
这有点简单:
matchstr(getline('.'), '<\zs\a*\ze\(\w\|[= ''"]\)*>\%' . col('.') . 'c')
可能只需将%\|\.\|
添加到原始版本,或者将%.
添加到我的方括号内,您就可以获得所需内容。