Emacs modeline在文件末尾的一行中

alf*_*lfC 2 emacs

我正在开发一个项目,其中一些人使用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:
Run Code Online (Sandbox Code Playgroud)

问题是:如何在"一行"代码中转换emacs部分(如vim可以)?并将其保留在源文件的末尾(不在顶部).

(可能这可以作为Lisp问题重新编写,但我不熟悉它)

phi*_*ils 6

目录本地变量可能是一种更好的方法.

单个.dir-locals.el文件将由每个人处理,根本不需要文件局部变量.

vim可能有类似的机制?


phi*_*ils 5

您可以使用eval:声明,但Emacs会要求您确认评估是否安全.如果你告诉Emacs永久地接受它,它将不再询问该表达式(它将它存储在safe-local-variable-valuesinit文件的custom-set-variables部分中).

;;; Local Variables:
;;; eval:(setq c-basic-offset 4 tab-width 4 indent-tabs-mode t truncate-lines 1)
;;; End:
Run Code Online (Sandbox Code Playgroud)

您可以将多个表达式包装在progn:

;;; Local Variables:
;;; eval:(progn (setq c-basic-offset 4) (message "hello"))
;;; End:
Run Code Online (Sandbox Code Playgroud)

或者使用任何其他结构(我认为没有任何限制).