据我所知在Emacs,有没有自定义关闭“>”在C模板列表的性格++的缩进级别的方式。目前我Emacs的压痕方案做到这一点:C++模板和Emacs:自定义缩进
template <
typename T1,
typename T2,
typename T3
>
class X;
我想是这样的:
template <
typename T1,
typename T2,
typename T3
>
class X;
设置缩进可变模板ARGS-CONT为零将适当缩进“>”字符,但是以代替模板参数列表的实际主体为代价。
emacs guru的任何建议吗?
编辑:
我得到了它有些用下面的黑客工作:
(defun indent-templates (elem)
(c-langelem-col elem t)
(let ((current-line
(buffer-substring-no-properties
(point-at-bol) (point-at-eol))))
(if (string-match-p "^\\s-*>" current-line)
0
'+)))
,然后设置模板ARGS-CONT缩进的模板在我的自定义主题,鼻翼:
(c-add-style "my-style"
'("stroustrup"
;; ... Other stuff ...
(template-args-cont . indent-templates))))
但它仍然是相当马车。它大部分时间都在工作,但有时候emacs会认为模板列表是一个arglist,然后会出现闹剧,这会让人感到困惑。
我不确定这是否可能,但如果是可以在此页面上找到信息:http://www.gnu.org/software/emacs/manual/html_mono/ccmode.html#Customizing-Indentation – rve
其实,我认为如果你写自己的阵容功能也许是可能的。我之前评论的文件给出了更多关于这方面的信息。 – rve
请注意,Emacs C++模式通常会周期性地对模板参数产生混淆,所以它可能实际上不会成为您代码的问题... [公平地说,实际上很难做到正确,因为它具有多种含义'<' and '>'在C + +(有时作为一个平衡的分隔符,有时作为一个操作符),除非你做了比c + +模式更多的实际解析...] – snogglethorpe