Моделин Emacs в конце файла в одной строке - PullRequest
2 голосов
/ 21 марта 2011

Я работаю над проектом, где некоторые люди используют 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)?и все же держите его в конце исходного файла (не в верхней части).

(Возможно, это можно переписать как вопрос о Лиспе, но я не знаком с ним)

Ответы [ 6 ]

6 голосов
/ 22 марта 2011

Локальные переменные каталога, вероятно, являются лучшим подходом.

Один файл .dir-locals.el будетобрабатываются всеми, и вообще не нужны локальные переменные файла.

vim может иметь аналогичный механизм?

5 голосов
/ 21 марта 2011

Вы можете использовать объявление eval:, но Emacs попросит вас подтвердить, что оценка безопасна.Если вы скажете Emacs принять его навсегда, он не будет спрашивать об этом выражении снова (он хранит его в safe-local-variable-values в разделе custom-set-variable вашего файла инициализации).

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

Youможет обернуть несколько выражений в progn:

;;; Local Variables:
;;; eval:(progn (setq c-basic-offset 4) (message "hello"))
;;; End:

или использовать любые другие конструкции (я не думаю, что есть какие-либо ограничения).

1 голос
/ 21 марта 2011

Вам нужно будет использовать // Local Variables: и // End:.Остальное можно сделать одной строкой, как в // eval: (setq c-basic-offset 4 tab-width 4 indent-tabs-mode t truncate-lines 1).

0 голосов
/ 21 марта 2011

Я собираюсь перевернуть вопрос?Вы действительно нуждаетесь в каких-либо локальных переменных файла?Если вы используете один и тот же стиль во всех исходных файлах, может быть лучше определить установку отступа 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)
0 голосов
/ 21 марта 2011

Похоже, вы могли бы быть 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

Если только вы не используете стиль Филса.

0 голосов
/ 21 марта 2011

(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), где your-func-here может быть функцией, которая просто устанавливает эти переменные.

Обратитесь к методу phils с использованием Local Variables и eval для достижения этой цели с помощью первой строки кода, приведенной выше. Извините, я не совсем понял, что это было только для одного файла или очень немногих файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...