我还没有成功弄清楚如何在Emacs中包装每个方法调用。例如,如果我有这个:

someObject.a()。b()。c();

我真的想要这个:

someObject.a()
          .b()
          .c();


这在Emacs中可能吗?我见过关于Eclipse的相同主题,但是我在Emacs中找不到任何东西。

最佳答案

所需的缩进不是js2-mode中的默认缩进。

此函数将堆叠调用链并根据您的模式缩进:

(defun javascript-chain-stack ()
  (interactive)
  (beginning-of-line)
  (if (looking-at ".*?\\sw+\\.\\sw+(.*;$")
      (let* ((str (match-string-no-properties 0))
             (beg (match-beginning 0))
             (end (match-end 0))
             (strs (split-string str "\\." t))
             (rstr (concat (car strs)
                           (mapconcat
                            (lambda (x) (concat "." x))
                            (cdr strs) "\n"))))
        (delete-region beg end)
        (insert rstr)
        (indent-region beg (+ beg (length rstr))))
    (error "Couldn't match JavaScript chain call")))


这将是结果(在我的缩进设置中):

someObject.a()
  .b()
  .c();


可以从任何地方调用该函数。

09-11 18:52