我不完全是一个 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/