标签的Vimscript正则表达式

时间:2014-04-07 21:54:55

标签: regex vim

我目前有以下vimscript函数来通过游标获取当前的HTML标记:

fun s:GetCurrentTag()
return matchstr(matchstr(getline('.'),
\ '<\zs\(\w\|=\| \|''\|"\)*>\%'.col('.').'c'), '^\a*')
endf

这段代码是由其他人编写的,所以我不确定它的作用。有人可以提供简短的解释。我还没能在网上找到任何好的vimscript正则表达式文档。

但是,最重要的是我想要更改此功能,以便它可以检测其中包含%.的代码。

1 个答案:

答案 0 :(得分:3)

Vim的正则表达式记录在:help pattern下。另请参阅:help design-documented

从内到外,

  1. getline('.')将当前行作为字符串。
  2. matchstr(string, pat)获取与模式pat匹配的字符串部分。
  3. <匹配文字左尖括号。
  4. \zs表示&#34;在此处开始匹配&#34;,以便<不会被包含在内。
  5. \(...\)创建了一个群组。
  6. \|代表另一种选择。因此,该论坛会匹配\w(单词字符),=(字面意思),(空格),'(字面值,加倍,因为它位于&#内39;文字字符串&#39;),或"(字面意思)。
  7. *表示&#34;零或更多,尽可能多&#34; (贪婪)。它适用于前一项;在这种情况下,它适用于该组。
  8. >使用文字直角括号。
  9. '\%' . col('.') . 'c'匹配当前列。所以我认为只有在光标是结束>之后的一个字符时才会匹配。
  10. 匹配当前代码(在开场<之后开始,并且在结束>之后转过一个字符)另一个matchstr()在开始时选择字母部分。
  11. 这不是我写的方式。

    这有点简单:

    matchstr(getline('.'), '<\zs\a*\ze\(\w\|[= ''"]\)*>\%' . col('.') . 'c')
    

    可能只需将%\|\.\|添加到原始版本,或者将%.添加到我的方括号内,您就可以获得所需内容。