我希望将Vim视为符合以下条件关键字字符串:
( "(" <scope> ")" [:_/] ){0,1} <name>
其中:
<scope> = [@+-.] ( ":" <name> )*
<name> = [a-zA-Z][a-zA-Z0-9_]*
描述关键字定义的正则表达式可能如下所示:
\(([@_-.]\(:[a-zA-Z][a-zA-Z0-9_]*\)*)\){0,1}[a-zA-Z][a-zA-Z0-9_]*
一些具体的例子:
(@:a):f
(+:b:c)_v
(-)/p
n
使用Vim的setiskeyword似乎不能处理正则表达式。
我曾考虑过以下表达式:
let @/ =~ '\<'.expand('<cword>').'\>
但似乎也不能胜任这项任务。
这种方法的用例是键入 * 来搜索与光标下的正则表达式匹配的单词。
我还考虑了**%#是否可能是解决方案的一部分;然而,这似乎需要将正则表达式拆分为前置部分和后置部分。
Vim有没有办法用正则表达式定义关键字,用于在光标下启动搜索,然后使用n和p来查找下一个和上一个匹配项?解决方案不一定需要涉及iskeyword**。我怀疑使用**@/**是解决方案的一部分。你的想法是什么?
1条答案
按热度按时间mhd8tkvw1#
正如您所注意到的,不能用正则表达式模式定义“keyword”,而且,Vim没有
<cpattern>
来重用光标下的“pattern”,甚至没有[:pattern:]
字符类来匹配“patterns”。换句话说,你可以完美地做到:
但你不能这样做:
这意味着你面前有两个难题:
1.抓取光标下的 pattern(什么构成了模式?模式从哪里开始?模式从哪里结束?)。
1.将其 * 手动 * 转换为适当的Vim模式。
而且没有内置的低级助手供您使用。