我正在开发一个项目,其中一些人使用vi,一些人使用emacs和其他一些人(包括gedit)。实施(至少是视觉)风格的最简单但全局的方式(尽管不是完美的)是在每个文件的末尾添加以下行:
...
return 0;
}
// Editor modelines - generated by http://www.wireshark.org/tools/modelines.html
// Local variables:
// c-basic-offset: 4
// tab-width: 4
// indent-tabs-mode: t
// truncate-lines: 1
// End:
// vim:set ft=cpp ts=4 sw=4 sts=4 nowrap: cindent:
问题是:如何在“一行”代码中转换emacs部分(如vim可以)?并将其保留在源文件的末尾(不在顶部)。
(可能这可以作为Lisp问题重新编写,但我不熟悉它)
答案 0 :(得分:6)
目录本地变量可能是更好的方法。
每个人都会处理单个.dir-locals.el
文件,根本不需要文件局部变量。
答案 1 :(得分:5)
您可以使用eval:
声明,但Emacs会要求您确认评估是否安全。如果你告诉Emacs永久接受它,它将不再询问该表达式(它将它存储在你的init文件的custom-set-variables部分的safe-local-variable-values
中)。
;;; Local Variables:
;;; eval:(setq c-basic-offset 4 tab-width 4 indent-tabs-mode t truncate-lines 1)
;;; End:
您可以在progn
中包装多个表达式:
;;; Local Variables:
;;; eval:(progn (setq c-basic-offset 4) (message "hello"))
;;; End:
或者使用任何其他结构(我认为没有任何限制)。
答案 2 :(得分:1)
您需要使用// Local Variables:
和// End:
。其余部分可以像// eval: (setq c-basic-offset 4 tab-width 4 indent-tabs-mode t truncate-lines 1)
一样制作成一行。
答案 3 :(得分:0)
(setq c-basic-offset 4 tab-width 4 indent-tabs-mode t truncate-lines 1)
将此添加到您的.emacs中。如果您希望针对特定文件类型执行此操作,则可以始终使用add-hook调用,例如(add-hook 'c-mode-common-hook 'your-func-here)
,其中-func-here可以是仅设置这些变量的函数。
请参阅使用局部变量和eval的phils方法,以使用上面给出的第一行代码完成此操作。抱歉,我不太明白这仅适用于单个文件或极少数文件。
答案 4 :(得分:0)
看起来你可能是SOL:
指定文件变量:http://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html
Emacs中的变量: http://www.gnu.org/software/emacs/manual/html_node/emacs/Variables.html#Variables
除非你使用Phils的eval风格。
答案 5 :(得分:0)
我要转过来问这个问题?你真的需要任何文件局部变量吗?如果在所有源文件中使用相同的样式,最好定义C缩进设置并在所有开发人员之间分配。
(defconst my-c-style
'((c-basic-offset . 2)
(c-offsets-alist
. ((substatement-open . 0)
(statement-case-open . +)
(inline-open . 0)
(arglist-cont-nonempty . (c-indent-operator-lineup-arglist-operators
c-lineup-arglist)))))
"My indentation style")
(defun my-c-mode-common-hook ()
(interactive)
(c-add-style "my" my-c-style t))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)