search - 在 emacs lisp 中,有没有办法搜索与当前点重叠的字符串相匹配的文本?

标签 search emacs elisp

我不完全是一个 Lisp 专家,所以请原谅一个相当新手的问题。

我正在编写一个相当简单的 elisp 函数,试图在与当前光标位置相同的行上找到一个短字符串。现在编写的代码的相关部分是:

(let ((matchpos (search-forward myword (line-end-position) t)))
  (if matchpos
      (goto-char (- matchpos (length myword)))
    (setq matchpos (search-backward myword (line-beginning-position) t)))
  ...

这通常可以正常工作,但无法找到包含当前光标位置的字符串。显然,向后搜索仅查找在 point 之前结束的字符串。事实上,我可以通过在向后搜索之前转到行尾来解决这个特定问题,但我很好奇这种行为是否可以修改。

向后搜索是否有任何变体可以匹配在点之前开始的任何字符串?

编辑:也许有一个例子是合适的,因为那些回答的人似乎不太理解这个问题。假设我正在搜索字符串“search this”,我的行看起来像这样(用 * 标记的点):

I want to search this string, I have code to search t*his string

不幸的是,上面显示的代码片段将指向上面行中第一次出现的“search this”。我希望点位于第二个“搜索此”字符串的开头,即当前包含点的字符串,因为它是最近的字符串。

最佳答案

search-forward 的第二个参数限制搜索,因此要在当前行搜索字符串,请转到该行的开头,然后使用该行的末尾作为边界:

(beginning-of-line)
(search-forward myword (line-end-position))

如果您不想移动点,请使用 save-excursion保存它:

(save-excursion
  (beginning-of-line)
  (search-forward myword (line-end-position)))

关于search - 在 emacs lisp 中,有没有办法搜索与当前点重叠的字符串相匹配的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6182330/

相关文章:

使用 utf-8 编码的主题进行 Python IMAP 搜索

java - 创建lucene索引的方法

arrays - 在 O(lgn) 中搜索部分排序的数组

regex - Emacs Lisp : matching a repeated pattern in a compact manner?

emacs - 如何从 Eval : in . dir-local.el 设置缓冲区局部变量?

emacs - 如何使用 emacs 允许在长 gnuplot 命令中进行注释?

search - 如何在 Vim 中搜索包含正则表达式的字符串?

emacs - Emacs函数(eval-and-compile ...)的作用是什么?

c++ - 如何将 emacs C++ 模式下的代码对齐到 ";"或 ","?

emacs - 如何在 emacs 的 verilog 模式下禁用自动换行