仅在非空行上触发的 Emacs 宏

Emacs macro that only fires on non-empty lines

一般来说,我发现自己在编写简短的宏,例如在一行中添加或删除行注释或更正缩进。

但是,启用空白模式后,我仍然需要注意不要在空白行上触发这些宏;如果宏试图删除空行中的一个字符,通常它会弄乱整个文档。

是否有解决此问题的方法,既不涉及在空白行上留一些空格,又不改变我的文档结构?

您可以在宏的开头使用 C-M-s ^.。即搜索至少包含一个字符的行。

上扩展 -- 这是一个版本,它还会通知是否根本没有上一行:

(defun goto-first-previous-non-empty-line ()
  (interactive)
    (if (re-search-backward "^." nil t)
        (message "First previous non-empty line")
      (message "Beginning of buffer")
      )
    )