本帖最后由 muwind 于 2022-5-6 22:22 编辑
全字匹配真的很简单,
如果你所有的替换都要全字匹配 可以把repall改名为KX-reptext替换原来的函数
如果你要保留部分替换,可以在原来的代码基础上增加一个选项,
设置为全字匹配的时候调用repall进行替换,不需要全字匹配的时候用原来的KX-reptext
选择集判断我习惯在主程序里面判断 是否为nil,在子函数里面我觉得还是干净点比较好
- (defun repall (SS oldch newch / ss ct0 edata etext )
- (setq ssl (sslength ss) ct0 0 )
- (while (< ct0 ssl)
- (setq edata (entget (ssname ss ct0)) etext (cdr (assoc 1 edata)) )
- (if (= oldch etext) (entmod (subst (cons 1 newch) (assoc 1 edata) edata)))
- (setq ct0 (1+ ct0))
- )
- )
- (DEFUN C:tt()
- (setvar "cmdecho" 0)
- (if (setq ss (SSGET":s" '((0 . "*TEXT"))) )
- (progn
- (repall SS "全字" "全字匹配")
- (repall SS "匹配全字" "全字匹配")
- )
- (princ "您没有选择任何文字,我喝西北风去了")
- )
- (PRINC)
- )
|