大家用emacs最爽的经历是? 正则替换也能玩出花来 上面两个网址都用上了替换时动态 eval 的操作,但我都没有成功过,显示 void variable count,init 里也 require 了 cl 和 cl-lib,是哪里出问题了吗?系统是 win10 64,用的 Emax 64。
报错意料之中,因为 count
没定义。或许作者自己定义了,却忘记提了。但是 \#
代表当前序号,用不着自己数,参考 C-h k C-M-%
。
\#
确实可以,但网址里给的那个功能更强大,如果是 count 没定义的问题的话,我再去问问作者好了:sob:
没有就自己定义一个呗
(defvar count 0)
本坛坛友已经总结过许多生成序列的骚姿势了
加入 (defvar count 0)
之后,所有替换都变成0了。另外我看你那个链接里,子龙山人最开始用的命令里也包含 count,我输入他那个命令也是不行的,是不是 Spacemacs 里集成了什么插件,我这里没有啊?
defvar单独用一次再用替换
你的意思是先 M-: (defvar count 0)
,再在正则里输入 \,(cl-incf count 0)
吗,我这样做也不行啊。
场景二提供一个 vim 的思路:先找 <li>
,再往回找最近的 <ul>
。两者行数减一下,就知道奇/偶数行了。
:%s/<li>/\='<li class='.((search('<ul>','b')-search('<li>'))%2?'"odd">':'"ever">')/g
就是基础操作 :%s/pat/sub/g
扩展了一下。无需定义新变量,简洁直观,一行搞定。
论坛可能有几个 vim 党,这里再贴一遍好了。
不知道你的emacs是怎么样的,我这是开着emacs -q
测试
我这么输之后,第一次是最底下的id为1,依次往上递增。然后加了个0再删掉,数字就开始变了(装了可视插件,所以全程没有执行,但替换后的结果一直在变)。先暂时放弃了…反正现在也还用不上,到时候再说吧
用\#
吧,如果想骚操作,用子组匹配就可以获取内容然后用elisp操作了