emacs - 有没有人有用于缩进(和取消缩进)文本 block 的 Emacs 宏?

标签 emacs lisp elisp

有没有人有用于缩进(和取消缩进)文本 block 的 Emacs 宏?

我指的是通常意义上的“缩进”,而不是 Emacspeak 中的“缩进”。换句话说,我想标记一个区域,按 C-u 2,运行这个宏,让它在该区域的每一行之前添加两个空格。

或者在运行宏之前按 C-u -2 并让它从区域中每行的开头删除两个空格。如果行没有足够的前导空格时它会提示,则可加分。

最佳答案

严格缩进(绑定(bind)到 C-x TAB)做你想做的。它在 indent.el 中,它应该是标准 emacs 发行版的一部分。

此外,要让它在某处没有足够的空格时提示/中止,您可以这样做:(原始缩进严格代码的快速丑陋破解)

(defun enough-whitespace-to-indent-p (start end arg)
  (save-excursion
    (goto-char end)
    (setq end (point-marker))
    (goto-char start)
    (or (bolp) (forward-line 1))
    (while (and (< (point) end)
                (>= (+ (current-indentation) arg) 0))
      (forward-line 1))
    (>= (point) end)))

(defun indent-rigidly-and-be-picky (start end arg)
  (interactive "r\np")
  (if (or (plusp arg) (enough-whitespace-to-indent-p start end arg))
      (indent-rigidly start end arg)
(message "Not enough whitespace to unindent!")))

关于emacs - 有没有人有用于缩进(和取消缩进)文本 block 的 Emacs 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/787145/

相关文章:

search - 在 emacs 中编辑 I-search 词?

lisp - 一个基本的 Lisp 程序错误

emacs - 如何镜像 Emacs 包存储库服务器?

sorting - 如何检查列表是否在 Racket 中排序?

debugging - 为我的自定义 .NET 语言构建调试器

emacs - 使用recentf 强制emacs 最近的文件忽略指定的文件(例如.windows 和.revive)

emacs - 如何在emacs中复制粘贴而没有源字体锁定?

emacs - 在模式行中更改缓冲区名称的颜色

用于 "free"光标定位的 Emacs 模式

emacs - 如何在 Emacs Lisp 中使用 Slime 运行 Common Lisp 代码