emacs - Emacs Lisp 中的 strpos

标签 emacs elisp strpos

有没有像strpos() in PHP 这样的原生Emacs Lisp 函数? ?它应该返回给定字符串在当前缓冲区中第一次出现的位置。函数 search-forward 很好,但它修改了字符位置。

最佳答案

PHP中strpos对应的函数,在一个字符串中查找另一个字符串,是cl包中的search:

(require 'cl)
(search needle haystack :start2 offset)

如果要在缓冲区内搜索字符串,请使用search-forward。由于这会更改当前缓冲区和该缓冲区内的点,因此您需要将函数包装在 save-excursion 中;这是一个常见的 Emacs Lisp 习惯用法。您还应该将您的函数包装在 save-match-data 中,以免干扰任何调用您的代码的搜索。

(save-match-data
  (save-excursion
    (set-buffer haystack)
    (goto-char (or offset (point-min)))
    (let ((pos (search-forward needle nil t)))
      ...)))

关于emacs - Emacs Lisp 中的 strpos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3896953/

相关文章:

emacs - 处理过去的 Emacs Lisp 动态范围陷阱

emacs - Gist (gist.el/Emacs) -- 创建时设置 `description`

emacs - emacs 最好的键盘?

emacs - 如何区分目录和文件

php - 如何解决 strpos() "empty delimiter"错误?

php - str_replace 为 strpos?

emacs - emacs 中的 Ipython 将垃圾文本转储到 shell 中

emacs - 如何在 Emacs 中进行缓冲区本地键绑定(bind)?

emacs - 为什么 font-lock-keyword-face 在 Emacs 中突出显示双引号内的文本?

php - 我对 "strpos"函数的错误? PHP