在elisp中将缓冲区的当前行作为字符串提取

27

我该如何在elisp中将缓冲区的当前行作为字符串值收集起来?我可以这样做:

(let (p1 p2 myLine)
 (setq p1 (line-beginning-position) )
  (setq p2 (line-end-position) )
  (setq myLine (buffer-substring-no-properties p1 p2))
)

但是有没有办法我可以一行代码实现呢,比如:

(with-current-buffer get-current-line)

我不确定我理解了。您是否只是想在没有 p1p2 的情况下完成此操作,即全部内联,还是您正在寻找特殊的东西? - Wintermute
3
let 不仅声明变量,还为它们赋值。因此,您的代码创建变量,并将它们的值设置为 nil,然后立即将它们设置为其他值。最好跳过中间步骤,直接写成:(let* ((p1 (line-beginning-position)) (p2 (line-end-position)) (myLine (buffer-substring-no-properties p1 p2))) ...) - Stefan
1个回答

48
使用 thing-at-point
(thing-at-point 'line t)

但请注意,这也会返回行末的任何换行符。


3
另一个注意事项:当光标位于缓冲区末尾时,此调用将返回相同的字符串,就好像光标在上一行。 - kdb
你可以使用string-trim-right函数去除行末的换行符:(string-trim-right (thing-at-point 'line t)) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接