关于字符相同的 pair 匹配问题

最近本人在写一个与编辑模式有关的插件,然后加入了一个匹配 pair 并 mark 的功能
一般情况下:

而匹配像双引号这样的 pair 就比较容易出问题了:

我想过若 pair 的两个字符相同,就取整个 buffer,然后在其中推导出正确的两个 point,但如果文件太大了就会造成卡顿。或者在加载 buffer 后就异步调用函数来获取所有相同的 pair 的信息,但也感觉不太好。
请问有什么好的解决办法嘛?

如果只是要处理 string 两边的引号的话,(syntax-ppss-context (syntax-ppss)) 可以看光标是不是在 string 里面。这样假如光标在一个引号上的话,可以看往前往后各一个字符是不是还在 string 里面,从而推导出匹配的引号在哪一边。

Edit: 仔细看了下楼主的需求,其实用这个方法判断一下当前位置是不是在 string 里面,然后往前后找引号就行了。

这个想法不错。不过我只是想要string类的选择,而是所有相同字符的 pair,例如 org 中 =test=
不过通过syntax是好办法,我再去琢磨一下

那样的话其实看光标下的 face 也可以吧,比如你的例子里可以看是不是 org-verbatim

major mode 的高亮也不一定是用 syntax-table 做的(参见各 major mode 里对 font-lock-defaults 的设置)。其实 syntax-table 能做的很有限,想利用现成的逻辑的话我觉得看 face 应该是比较好的做法了。

1 个赞

换成了 face 之后的确比用 syntax 简单多了,只需要考虑 \ 的问题了,感谢。
目前已经完成了,截图贴上。

1 个赞