首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用align.el和` align -current`轻松对齐let表单

如何使用align.el和` align -current`轻松对齐let表单
EN

Stack Overflow用户
提问于 2012-05-28 20:21:42
回答 1查看 181关注 0票数 3

我想对齐

代码语言:javascript
复制
(let ((blah  foo)
      (asdfasdf asdasdfafd))
  (message "foo"))

成为

代码语言:javascript
复制
(let ((blah     foo)
      (asdfasdf asdasdfafd))
  (message "foo"))

换句话说,let绑定值应该正确对齐。

如果我选择前两行,则此函数起作用:

代码语言:javascript
复制
(defun align-try-1 (beg end)
  (interactive "r")
  (align-regexp beg end "^\\s-*+\\(?:(let\\S-*\\|\\)\\s-*(+\\S-+\\(\\s-+\\)" 1 1 nil))

但是,我想通过连接到align机器来使align-current工作。也就是说,对于前两行中的任何位置的点,应该在不影响第三行的情况下进行正确的对齐。

EN

回答 1

Stack Overflow用户

发布于 2012-06-13 08:22:31

您不能在regexp中扫描sexps,因为它们是递归扫描的。

我写这个东西时没有使用align (我不确定是否可以用align函数来完成,但只要坚持使用sexp moves,gotos和insertions对我来说就更容易)。

代码语言:javascript
复制
(defun align-try-1 (beg end)
  (interactive "r")
  (goto-char beg)
  (let ((endmarker (move-marker (make-marker) end)))
    (catch :break
      (while t
        (catch :continue
          (let ((actual-begin (re-search-forward "(\\([[:space:]\n]*\\)let\\([[:space:]\n]*\\)(" endmarker t))
                 (max-column  0))
            (unless actual-begin (throw :break nil))
            (when (or (in-string-p)
                    (eq (get-char-property actual-begin 'face) 'font-lock-comment-face))
              (throw :continue nil))
            (while (and (< (point) endmarker) (ignore-errors (down-list) t) (ignore-errors (forward-sexp) t))
              (when (looking-at "[[:space:]\n]+") (delete-region (match-beginning 0) (match-end 0)))
              (insert " ")
              (when (< max-column (current-column))
                (setq max-column (current-column)))
              (backward-up-list)
              (forward-sexp))
            (goto-char actual-begin)
            (while (and (< (point) endmarker) (ignore-errors (down-list) t) (ignore-errors (forward-sexp) t))
              (when (looking-at "[[:space:]\n]+") (delete-region (match-beginning 0) (match-end 0)))
              (dotimes (i (- max-column (current-column))) (insert " "))
              (backward-up-list)
              (forward-sexp))
            (goto-char actual-begin)
            ))))))

顺便问一下,你在哪里使用它?

更新:添加了对注释或字符串的检查。

更新:删除了强制格式化的东西,因为它有buggy,在原始问题中不需要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10784588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档