最近本人在写一个与编辑模式有关的插件,然后加入了一个匹配 pair 并 mark 的功能
一般情况下:
而匹配像双引号这样的 pair 就比较容易出问题了:
我想过若 pair 的两个字符相同,就取整个 buffer,然后在其中推导出正确的两个 point,但如果文件太大了就会造成卡顿。或者在加载 buffer 后就异步调用函数来获取所有相同的 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 应该是比较好的做法了。