Я действительно пытаюсь переключиться на emacs, но обучение установить среду является реальной болью. Все говорят, что это стоит того, таким образом, я только продолжаю.
Я хочу, чтобы мой код c был реализован тот путь:
if(asdf)
{
asdr = 1;
}
В зависимости от текущего стандарта (я знаю, не запускайте меня), мог быть:
if(asdf) {
asdr = 1;
}
Я, может казаться, не изменяю размер добавления отступа от 2, он всегда похож на стандарт GNU:
if(asdf)
{
asdr = 1;
}
, который я не люблю. Вот то, что я вставил свой .emacs:
; Warn in C for while();, if(x=0), ...
(global-cwarn-mode 1)
; no electric mode in c
(c-toggle-electric-state -1)
; indent the current line only if the cursor is at the beginning of the line
(setq-default c-tab-always-indent nil)
(setq-default c-indent-level 4)
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
(setq-default c-basic-offset 4)
(setq-default c-basic-indent 4)
; These commands I read about on the web, but they don't work?
;(highlight-tabs)
;(highlight-trailing_whitespace)
Это не помогло, у меня есть все еще отступ GNU. Кто-либо?
---ОТРЕДАКТИРУЙТЕ К ADD МОЙ ЦЕЛЫЙ .emacs (на самом деле ~/.emacs.d/init.el)
; directory to put various el files into
(add-to-list 'load-path "C:/Program/emacs-22.3/includes")
; loads ruby mode when a .rb file is opened.
(autoload 'ruby-mode "ruby-mode" "Major mode for editing ruby scripts." t)
(setq auto-mode-alist (cons '(".rb$" . ruby-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".rhtml$" . html-mode) auto-mode-alist))
(add-hook 'ruby-mode-hook
(lambda()
(add-hook 'local-write-file-hooks
'(lambda()
(save-excursion
(untabify (point-min) (point-max))
(delete-trailing-whitespace)
)))
(set (make-local-variable 'indent-tabs-mode) 'nil)
(set (make-local-variable 'tab-width) 2)
(imenu-add-to-menubar "IMENU")
(define-key ruby-mode-map "\C-m" 'newline-and-indent) ;Not sure if this line is 100% right but it works!
(require 'ruby-electric)
(ruby-electric-mode t)
))
; Install mode-compile to give friendlier compiling support!
(autoload 'mode-compile "mode-compile"
"Command to compile current buffer file based on the major mode" t)
(global-set-key "\C-cc" 'mode-compile)
(autoload 'mode-compile-kill "mode-compile"
"Command to kill a compilation launched by `mode-compile'" t)
(global-set-key "\C-ck" 'mode-compile-kill)
(show-paren-mode 1)
; Color theme
(require 'color-theme)
(color-theme-pok-wog)
;;Emacs.pane.menubar.* does not seem to work?
;Emacs.pane.menubar.background: darkGrey
;Emacs.pane.menubar.foreground: black
; Default font 9 pt
(set-face-attribute 'default nil :height 80)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(font-lock-comment-face ((t (:foreground "limegreen" :slant oblique))))
'(font-lock-preprocessor-face ((t (:inherit font-lock-builtin-face :foreground "orange" :weight bold)))))
(global-set-key [C-tab] 'other-window)
(global-set-key [C-S-tab] (lambda () (interactive) (other-window -1)))
(defun linux-c-mode ()
"C mode with adjusted defaults for use with the Linux
kernel."
(interactive)
(c-mode)
(setq c-indent-level 8)
(setq c-brace-imaginary-offset 0)
(setq c-brace-offset -8)
(setq c-argdecl-indent 8)
(setq c-label-offset -8)
(setq c-continued-statement-offset 8)
(setq indent-tabs-mode nil)
(setq tab-width 8))
; Warn in C for while();, if(x=0), ...
(global-cwarn-mode 1)
; no electric mode in c
(c-toggle-electric-state -1)
; indent the current line only if the cursor is at the beginning of the line
(setq-default c-tab-always-indent nil)
(setq-default c-indent-level 4)
(setq-default tab-width 4)
(setq indent-tabs-mode nil)
(setq-default c-basic-offset 4)
(setq-default c-basic-indent 4)
; These commands I read about on the web, but they don't work?
;(highlight-tabs)
;(highlight-trailing_whitespace)
(setq indent-tabs-mode nil)
(setq c-default-style "user")
;; Remove lull: scroll bar, tool bar, menu bar.
(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
(if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
(if (fboundp 'menu-bar-mode) (menu-bar-mode -1))
;; restore window size as it was at previous use
(defun restore-saved-window-size()
(unless (load "~/.emacs.d/whsettings" t nil t)
(setq saved-window-size '(80 30)))
(nconc default-frame-alist `((width . ,(car saved-window-size))
(height . ,(cadr saved-window-size)))))
(restore-saved-window-size)
(defun save-window-size-if-changed (&optional unused)
(let ((original-window-size `(,(frame-width) ,(frame-height))))
(unless (equal original-window-size saved-window-size)
(with-temp-buffer
(setq saved-window-size original-window-size)
(insert (concat "(setq saved-window-size '"
(prin1-to-string saved-window-size) ")"))
(write-file "~/.emacs.d/whsettings")))))
(add-hook 'window-size-change-functions 'save-window-size-if-changed)
;; Ack as a replacment for grep
(global-set-key "\M-s" 'ack)
(require 'ack)
Ваши настройки по умолчанию, возможно, отменяются функцией стиля cc-mode
.
Попробуйте инициализировать стиль по умолчанию следующим образом:
(setq c-default-style '((java-mode. "Java") (awk-mode. "Awk") (other. "User")))
Вы должны иметь возможность вставить предыдущую строку в ваш файл .emacs или настроить переменную c-default-style
. По умолчанию (другой "gnu")
является последним элементом списка, что означает, что все файлы, отличные от Java, и файлы, отличные от awk, получают стиль gnu
вместо того, который вы установили. с setq
. Специальный пользовательский стиль
инициализируется из ваших вручную установленных переменных стиля.
Другой вариант - выбрать один из встроенных стилей вместо того, чтобы определять его самостоятельно, или создать свой собственный стиль с помощью функции c-add-style
. Для этого замените «пользователь»
в приведенной выше команде на имя стиля (в виде строки). Попробуйте встроенные стили stroustrup
или python
, чтобы отформатировать операторы if так, как вы хотите.
В EmacsWiki есть хорошая статья о IndentingC.
На самом деле, в EmacsWiki есть хорошие статьи обо всем. Я бы не хотел изучать Emacs до того, как он существовал.
Отступ в emacs cc-mode регулируется набором смещений, каждое из которых может быть установлено в соответствии с именем, присвоенным смещению.
Открытая фигурная скобка после оператора if имеет смещение с именем. Если вы измените значение смещения, открытый фигурный будет иметь другой отступ. Точно так же открытая фигурная скобка после объявления функции имеет именованное смещение. Продолжение строк в макросе имеет именованное смещение. Метки case в операторе switch, циклы do while. У всех есть зачеты. Их миллиард, и все они хранятся в переменной с именем c-offsets-alist
.
Стили, упомянутые в других местах, предоставляют «базовое смещение», которое обычно составляет 2, 4 или 8 пробелов, а затем значение для c-offsets-alist
. У каждого стиля также есть имя, и вы можете получить собственные стили из других стилей. Примерно так:
(c-add-style "myCStyle"
'("bsd" ; this must be defined elsewhere - it is in cc-modes.el
(c-basic-offset . 4)
(c-echo-syntactic-information-p . t)
(c-comment-only-line-offset . (0 . 0))
(c-offsets-alist . (
(c . c-lineup-C-comments)
(statement-case-open . 0)
(case-label . +)
(substatement-open . 0)
))
))
Значение для каждого именованного смещения в c-offsets-alist
может быть одним из:
0
подразумевая, оставить отступ таким же, как в предыдущей строке +
подразумевая, увеличить отступ, один дополнительный уровень -
подразумевая, уменьшить отступ, один дополнительный уровень Вы также можете использовать ++, -, и так далее. Поместите что-то подобное для определения стиля в ваш файл .emacs.Затем, чтобы автоматически использовать этот стиль при редактировании файлов C, используйте c-set = style
в ловушке c-mode, например:
(defun doug-c-mode-hook-fn ()
(cond (window-system
;; use my defined style for all C modules
(c-set-style "myCStyle")
;; never convert leading spaces to tabs
(setq indent-tabs-mode nil)
....
)))
(add-hook 'c-mode-hook 'doug-c-mode-hook-fn)
Следующий вопрос: как определить, какой из названных c-смещения, которые вам нужно установить для каждой конкретной ситуации? Для этого есть приложение. хорошо, не приложение, а функция elisp.
M-x c-set-offset
Показывает, где, по мнению emacs, это находится синтаксически, в исходном файле режима cc. Чтобы использовать его, поместите курсор в позицию, где вы хотите узнать имя смещения, или измените смещение. Затем вызовите эту функцию. Он сообщит вам имя смещения для текущего синтаксического элемента.
Если вы измените значение этого именованного элемента в своем c-offsets-alist для выбранного стиля, что обычно делается в .emacs или вашем эквиваленте, тогда параметр отступа будет верно для всех исходных модулей.