Как я могу применить новый стиль Emacs C для переформатирования всех моих исходных файлов? - PullRequest
7 голосов
/ 04 апреля 2009

Я бы хотел переформатировать все мои исходные файлы, используя функцию форматирования Google для emacs: google-c-style.el (см. здесь ).

Как я могу применить эту функцию сразу ко всем моим исходным файлам, чтобы они все были правильно отформатированы и с отступом в соответствии со стилем Google?

Ответы [ 4 ]

9 голосов
/ 04 апреля 2009

Есть несколько частей к этому:

  • вам нужно придумать функции EMACS, чтобы выполнить все необходимые преобразования. indent-region - это начало, но вы также можете удалить untabify или некоторые другие вещи.
  • вам нужно вызывать их для каждого файла, и поскольку функции отступа работают с диапазонами, вам нужна функция, которая устанавливает метку для всего файла: mark-whole-buffer.
  • вам нужно вызывать EMACS для каждого файла: это означает вызов emacs с файлом --batch.

Есть пара хороших сообщений в блоге о том, как это сделать здесь и здесь .

3 голосов
/ 06 апреля 2009

Я делал это раньше с помощью определенного макросом клавиатуры. Я загружаю все файлы в emacs (что-то вроде find . -name "*.cpp" | xargs emacs) и затем набираю следующие ключи. Я обозначил каждую комбинацию клавиш тем, что она делает.

C-x-(                  'Begin recording macro
M-<                    'Go to start of file
C-space                'Mark current location (now start of file)
M->                    'Go to end of file
M-x indent-region      'Indent entire file according to coding style
C-x C-s                'Save the current buffer
C-x C-k                'Close the current buffer
C-x-)                  'End recording macro

Теперь вы можете запустить это в буфере, набрав C-x e. Если вы загрузили несколько файлов, вы можете запустить что-то вроде C-u 100 C-x e, чтобы запустить это на 100 файлах. Если это больше, чем количество файлов, это нормально, вы получите просто «звонок» или другую ошибку, которую можете игнорировать после завершения всей обработки.

2 голосов
/ 04 апреля 2009

Я считаю, что этот скрипт не выполняет переформатирование. Вместо этого это пример того, как создать собственный «стиль», как описано в: Руководство по режиму CC - Стили

В руководстве по режиму CC также написано:

Если вы хотите переформатировать старый код, вам, вероятно, лучше использовать какой-то другой инструмент, например Отступ GNU, который имеет более мощные возможности переформатирования, чем режим CC.

Руководство по режиму CC - Ограничения и известные ошибки

0 голосов
/ 15 апреля 2009

Если вы хотите пометить исходные файлы в буфере Dired и затем запустить функцию для форматирования каждого из них, вы можете сделать что-то вроде этого:

(defun clean-file(filename)
  (your-function-goes-here))

(defun clean-each-dired-marked-file() 
  (interactive)
  (for-each-dired-marked-file 'clean-file))

(defun for-each-dired-marked-file(fn)
 "Do stuff for each marked file, only works in dired window"
 (interactive)
 (if (eq major-mode 'dired-mode)
     (let ((filenames (dired-get-marked-files)))
       (mapcar fn filenames))
   (error (format "Not a Dired buffer \(%s\)" major-mode))))
...