Emacs 中的自动缩进 Javascript 代码(bsd 风格又名 Allman 风格)
Auto indent Javascript code in Emacs (bsd style aka Allman style)
我无法将 Emacs 设置为与 Javascript 一起工作。我希望 Emacs 在我按下“{”和“}”时自动缩进。当我在 C 上编写代码时,它工作得很好。当我按下“}”时,括号就出现了。
我希望看到这样的内容:
但我明白了:
我不明白为什么要保留括号。
你能告诉我,我应该怎么做才能正确吗?
我想,我需要在我的 .emacs 文件中添加一些东西,不是吗?
这是我的 .emacs:
(setq c-default-style "bsd"
c-basic-offset 4)
(setq-default c-basic-offset 4
tab-width 4
indent-tabs-mode nil)
(setq make-backup-files nil
auto-save-default nil
auto-save-list-file-name nil)
(global-set-key (kbd "RET") 'newline-and-indent)
(show-paren-mode t) ; Highlight expression between {}, (), []
(setq show-paren-style 'parenthesis) ; parenthesis | expression | mixed
(add-hook 'html-mode-hook
(lambda ()
;; Default indentation is usually 2 spaces, changing to 4.
(set (make-local-variable 'sgml-basic-offset) 2)
(setq tab-width 2)
)
)
(setq font-lock-maximum-decoration
'((html-mode . 1)))
(setq column-number-mode t)
;(electric-pair-mode t)
;(setq electric-pair-preserve-balance nil)
;(electric-indent-mode -1)
; 80 letters rule (highlight)
(setq-default
whitespace-line-column 78
whitespace-style '(face lines-tail))
(add-hook 'prog-mode-hook #'whitespace-mode) ; only if I write code
(add-hook 'text-mode-hook #'whitespace-mode) ; and the other cases
; Use all c-mode settings when I code on javascript (indent, tab-width, ...)
;(add-hook 'js-mode-hook 'c-mode)
;(add-hook 'js-mode-hook #'c-default-style)
;(add-to-list 'auto-mode-alist '("\.js\'" . c-mode))
尝试 js2 模式。那有更好的风格和缩进。
顺便说一句,您可能不应该像这样在 .emacs 中编写所有内容。
文件结构可能类似于
|.emacs
| -- <your mode files.el>
我在这里有自己的 .emacs 和辅助文件:
https://bitbucket.org/tdatta/ansible_plays
在
之下
roles--> emacs --> files
你可以看看一个作为参考。它并不完美,但结构更好。
我找不到任何内置函数或现成的解决方案,所以我阅读了 emacs 文档并编写了我自己的 emacs-lisp 函数。也许会有人需要它。
(global-set-key (kbd "RET") 'newline-and-indent)
(add-hook 'js-mode-hook
(lambda()
(local-set-key (kbd "{")
(lambda() (interactive)
(my-bsd-lparen-align)
(insert "{")
)
)
(local-set-key (kbd "}")
(lambda() (interactive)
(insert "}")
(indent-according-to-mode)
;(c-indent-command)
)
)
)
)
(defun my-bsd-lparen-align()
(skip-chars-forward " \t")
(setq cur_pos (point))
(my-line-begin)
(setq new_pos (point))
(goto-char cur_pos)
(if (eq cur_pos new_pos)
(__my-bsd-lparen-put)
)
)
(defun my-line-begin()
(beginning-of-line)
(skip-chars-forward " \t")
(current-column)
)
(defun __my-bsd-lparen-put()
(setq init_pos (point))
(setq cur_start (my-line-begin))
(forward-line -1)
(setq block_start (my-line-begin))
(setq diff (- cur_start block_start))
(goto-char init_pos)
(if (>= diff 0)
(delete-backward-char diff)
(loop for i from 1 to (- diff) do (insert " "))
)
)
我无法将 Emacs 设置为与 Javascript 一起工作。我希望 Emacs 在我按下“{”和“}”时自动缩进。当我在 C 上编写代码时,它工作得很好。当我按下“}”时,括号就出现了。 我希望看到这样的内容:
但我明白了:
我不明白为什么要保留括号。
你能告诉我,我应该怎么做才能正确吗?
我想,我需要在我的 .emacs 文件中添加一些东西,不是吗?
这是我的 .emacs:
(setq c-default-style "bsd"
c-basic-offset 4)
(setq-default c-basic-offset 4
tab-width 4
indent-tabs-mode nil)
(setq make-backup-files nil
auto-save-default nil
auto-save-list-file-name nil)
(global-set-key (kbd "RET") 'newline-and-indent)
(show-paren-mode t) ; Highlight expression between {}, (), []
(setq show-paren-style 'parenthesis) ; parenthesis | expression | mixed
(add-hook 'html-mode-hook
(lambda ()
;; Default indentation is usually 2 spaces, changing to 4.
(set (make-local-variable 'sgml-basic-offset) 2)
(setq tab-width 2)
)
)
(setq font-lock-maximum-decoration
'((html-mode . 1)))
(setq column-number-mode t)
;(electric-pair-mode t)
;(setq electric-pair-preserve-balance nil)
;(electric-indent-mode -1)
; 80 letters rule (highlight)
(setq-default
whitespace-line-column 78
whitespace-style '(face lines-tail))
(add-hook 'prog-mode-hook #'whitespace-mode) ; only if I write code
(add-hook 'text-mode-hook #'whitespace-mode) ; and the other cases
; Use all c-mode settings when I code on javascript (indent, tab-width, ...)
;(add-hook 'js-mode-hook 'c-mode)
;(add-hook 'js-mode-hook #'c-default-style)
;(add-to-list 'auto-mode-alist '("\.js\'" . c-mode))
尝试 js2 模式。那有更好的风格和缩进。 顺便说一句,您可能不应该像这样在 .emacs 中编写所有内容。 文件结构可能类似于
|.emacs
| -- <your mode files.el>
我在这里有自己的 .emacs 和辅助文件:
https://bitbucket.org/tdatta/ansible_plays
在
之下roles--> emacs --> files
你可以看看一个作为参考。它并不完美,但结构更好。
我找不到任何内置函数或现成的解决方案,所以我阅读了 emacs 文档并编写了我自己的 emacs-lisp 函数。也许会有人需要它。
(global-set-key (kbd "RET") 'newline-and-indent)
(add-hook 'js-mode-hook
(lambda()
(local-set-key (kbd "{")
(lambda() (interactive)
(my-bsd-lparen-align)
(insert "{")
)
)
(local-set-key (kbd "}")
(lambda() (interactive)
(insert "}")
(indent-according-to-mode)
;(c-indent-command)
)
)
)
)
(defun my-bsd-lparen-align()
(skip-chars-forward " \t")
(setq cur_pos (point))
(my-line-begin)
(setq new_pos (point))
(goto-char cur_pos)
(if (eq cur_pos new_pos)
(__my-bsd-lparen-put)
)
)
(defun my-line-begin()
(beginning-of-line)
(skip-chars-forward " \t")
(current-column)
)
(defun __my-bsd-lparen-put()
(setq init_pos (point))
(setq cur_start (my-line-begin))
(forward-line -1)
(setq block_start (my-line-begin))
(setq diff (- cur_start block_start))
(goto-char init_pos)
(if (>= diff 0)
(delete-backward-char diff)
(loop for i from 1 to (- diff) do (insert " "))
)
)