分享一个elisp修改 buffer 时常见的错误,不应该犯的,大家引以为戒

写了一段elisp,如下,

(save-excursion 
  (goto-line 2) 
  (let ((found nil)) 
  (while (and (not found) (<= (line-number-at-pos) 90) (not (eobp)))
    (if (looking-at "^[[:space:]]*if(0){")
        (progn (kill-line)(insert "if(1){")
               (indent-for-tab-command)(setq found t) )
      (if (looking-at "^[[:space:]]*if(1){")
          (progn (kill-line)(insert "if(0){")
                 (indent-for-tab-command)(setq found t) ) )
          )
    (forward-line 1))
    ))

功能是在emacs中运行脚本后,检查脚本中的 if(0){ 修改成if(1){或者反过来。这样脚本运行数据就直接放脚本里了,不用另外找地方。

然而elisp没学好,为了简单方便,我直接kill-line,删除整行后在插入。结果我用了hs-hide-all代码折叠,运行后直接把代码给删了。

正确办法之一是用(replace-match "if(1){" nil nil nil 0)修改当前匹配,这样就安全了

1 个赞