[Elisp] 编程的时候一些不理解的问题

1. save-restiction

英文不太好,去查了半天,脑子还是懵逼的
这玩样是干什么用的? narrow-to-region又是个什么啊

2. search-forward

像这样 (search-forward "myStr1" nil t)
(search-forward STRING &optional BOUND NOERROR COUNT)
参数BOUND是什么鬼,为什么设置为nil

3. re-search-forward

(re-search-forward REGEXP &optional BOUND NOERROR COUNT)
(re-search-backward "\n[ \t]*\n" nil "move")
嗯??? NOERROR是move又是怎么回事??

4. set-mark-command 的调用

标记文本的时候我用的默认键位C-space,绑定的命令是set-mark-command
查文档的时候发现不能直接调用(set-mark-command)
而应该调用(set-mark-command ARG)
但是这个参数文档没告诉我,我应该怎么调用啊?

2 个赞

describe-function

然后看看elisp learn x in y的教程吧…

1 个赞

我也是一般文档都是看不明白是怎么回事,这时就去github 或.emacs.d/elpa/ 目录下搜看下别人是怎么用某个函数的,才能大知明白怎么用

推荐李杀的Lisp教程。浅显易懂,常用的函数都有覆盖。 不常用的也不用钻研了。比如save-restriction是什么我也是一窍不通,虽然我写Lisp也很久了。

2 个赞

原来你也这样,那这个函数我不学了吧 :wink:

narrow-to-region 就是把你buffer里显示的东西缩小到这个region的范围内,可以用widen来扩回去。

restriction就是指上面说的缩小扩大这回事,按这个理解,save-restriction就是把这个设置在body执行完后给恢复回来把(这个函数我不常用)。

BOUND就是指搜索范围呗

NOERROR是“move”,“move” != nil, 那就是跟t一个效果,只是方便看代码的人理解。

ARG 一般在文档里叫做 prefix argument, 所以这个set-mark-command 的文档是详细说了ARG的用途的。 对interactive cmd来说,一般按键的时候带C-u ,这个arg就是 '(4), C-u C-u 就是 '(16), 以此类推,具体的你写个interactive cmd 直接print一下就看到了

谢谢大哥 :slightly_smiling_face: