我没有成功地弄清楚如何在Emacs中包装每个方法调用。例如,如果我有这个:
someObject.a()B()C();
我真的想要这个:
someObject.a()
.b()
.c();
这在Emacs中可行吗?我已经看到了Eclipse所涵盖的相同主题,但我在Emacs中找不到任何内容。
答案 0 :(得分:0)
我想到的第一个解决方案是搜索和替换。我提出了一个解决方案,但它现在缺少正确的缩进。
手动,拨打M-%
(或M-x query-replace
)并要求将).
替换为)^Q^J.
(诀窍在于:在提示中插入换行符,输入{ {1}}然后C-q
)。
如果我们将它包装到一个可调用函数:
C-j
它适用于当前行。 但正如我所说,我正在寻找如何正确缩进的东西。
ps:elisp帮助:http://wikemacs.org/index.php/Emacs_Lisp_Cheat_Sheet#Positions& http://ergoemacs.org/emacs/elisp_basics.html& http://wikemacs.org/index.php/Emacs_Lisp_Cookbook
答案 1 :(得分:0)
您想要的缩进不是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();
可以从线上的任何地方调用该函数。