Emacs那坑爹的缩进
icefishc
2012-05-29
aran 写道 试试YASnippet吧,EMACS上的地球人都用他
YASnippet是好,不过和本帖子完全没关系啊。。。 |
|
aran
2012-05-29
icefishc 写道 aran 写道 试试YASnippet吧,EMACS上的地球人都用他
YASnippet是好,不过和本帖子完全没关系啊。。。 不就是格式问题么,对于特定的语句,想怎什么样的格式就什么样的。当然也不光是这插件,基础配置也是要的。比如制表符的宽度,要不要空格去代替,看个人喜好了。 我的配置,有点乱,凑合看吧 root@orz:/home/aran# cat .emacs.d/init.el (setq user-full-name "aran") (global-set-key (kbd "C-SPC") 'nil) (global-set-key (kbd "s-<SPC>") 'set-mark-command) ;;Confirm on exit (setq confirm-kill-emacs 'y-or-n-p) (add-to-list 'load-path "~/.emacs.d/elisp/") (require 'install-elisp) (setq install-elisp-repository-directory "~/.emacs.d/elisp/") (require 'tabbar) (tabbar-mode t) (require 'tabbar-ruler) ;(setq tabbar-ruler-global-tabbar 't) ; If you want tabbar ;(setq tabbar-ruler-global-ruler 't) ; if you want a global ruler ;(setq tabbar-ruler-popup-menu 't) ; If you want a popup menu. ;(setq tabbar-ruler-popup-toolbar 't) ; If you want a popup toolbar ;(require 'mmm-mode) ;(add-hook 'mmm-mode-user-hook 'turn-on-font-lock) ;(locate-library "auto-complete.el") (require 'auto-complete) (require 'auto-complete-config) (global-auto-complete-mode t) (setq-default ac-sources '(ac-source-words-in-same-mode-buffers)) (add-hook 'emacs-lisp-mode-hook (lambda () (add-to-list 'ac-sources 'ac-source-symbols))) (add-hook 'auto-complete-mode-hook (lambda () (add-to-list 'ac-sources 'ac-source-filename))) (set-face-background 'ac-candidate-face "lightgray") (set-face-underline 'ac-candidate-face "darkgray") (set-face-background 'ac-selection-face "steelblue") ;;; 设置比上面截图中更好看的背景颜色 (define-key ac-completing-map "\M-n" 'ac-next) ;;; 列表中通过按M-n来向下移动 (define-key ac-completing-map "\M-p" 'ac-previous) (setq ac-auto-start 2) (setq ac-dwim t) (define-key ac-mode-map (kbd "M-TAB") 'auto-complete) (add-to-list 'ac-dictionary-directories "/home/aran/.emacs.d/elisp/ac-dict") (ac-config-default) (add-to-list 'load-path "~/.emacs.d/elisp/yasnippet") (require 'yasnippet) ;;(setq yas/snippet-dirs '("~/.emacs.d/snippets" "~/.emacs.d/extras/imported")) (yas/global-mode 1) (add-to-list 'load-path "~/.emacs.d/elisp/multi-web-mode") (require 'multi-web-mode) (setq mweb-default-major-mode 'html-mode) (setq mweb-tags '((php-mode "<\\?php\\|<\\? \\|<\\?=" "\\?>") (js-mode "<script +\\(type=\"text/javascript\"\\|language=\"javascript\"\\)[^>]*>" "</script>") (css-mode "<style +type=\"text/css\"[^>]*>" "</style>"))) (setq mweb-filename-extensions '("php" "htm" "html" "ctp" "phtml" "php4" "php5")) (multi-web-global-mode 1) ;(load "~/.emacs.d/elisp/nxhtml/autostart.el") ;(add-hook 'php-mode-hook ;(lambda() ;(require 'php-completion) ;(php-completion-mode t) ;(define-key php-mode-map (kbd "C-c p") 'phpcmp-complete) ;(when (require 'auto-complete nol t) ;(make-variable-buffer-local 'ac-sources) ;(add-to-list 'ac-sources 'ac-source-php-completion) ;(auto-complete-mode t)))) ;(load-file "~/.emacs.d/elisp/google-c-style.el") ;(add-hook 'c-mode-common-hook 'google-set-c-style) ;(add-hook 'c-mode-common-hook 'google-make-newline-indent) ;(setq c-default-style "linux" ; c-basic-offset 4) ;(c-set-offset 'case-label '+) (autoload 'php-mode "~/.elisp/php-mode.el" "Major mode for editing php code." t) (add-to-list 'auto-mode-alist '("\\.php\\'\\|\\.phtml\\'" . php-mode)) (add-to-list 'auto-mode-alist '("\\.module$" . php-mode)) (add-to-list 'auto-mode-alist '("\\.inc$" . php-mode)) (load-library "hideshow") (add-hook 'c-mode-hook '(lambda() ;;(set 'indent-tabs-mode nil) (c-set-style "k&r") (c-set-offset 'case-label '+) ;;(c-set-offset 'arglist-close 0) ;;(c-set-offset 'arglist-intro '+) ;;(c-set-offset 'arglist-cont-nonempty 'c-lineup-math) ;;(c-toggle-hungry-state) ;;(c-toggle-auto-state) (setq c-basic-offset 4) )) (defconst my-php-style '((c-offsets-alist . ( (arglist-close . c-lineup-close-paren) ; correct arglist closing parenthesis ))) "My PHP Programming style" ) (c-add-style "my-php-style" my-php-style) (defun my-php-mode () "My personal php-mode customizations." (c-set-style "my-php-style") ; More generic PHP customizations here ) ;;PHP ;(add-hook 'php-mode-hook 'my-php-mode) ;;;;;;;;;;;;;;;;;;;;;;;;;;; 设置窗口界面 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;(set-foreground-color "grey") ;(set-background-color "black") ;(set-cursor-color "gold1") ;(set-mouse-color "gold1") (setq default-frame-alist '((vertical-scroll-bars) (top . 25) (left . 45) (width . 120) (height . 40) (background-color . "black") (foreground-color . "grey") (cursor-color . "gold1") (mouse-color . "gold1") (tool-bar-lines . 0) (menu-bar-lines . 1) (right-fringe) (left-fringe))) ;; 设置另外一些颜色:语法高亮显示的背景和主题,区域选择的背景和主题,二次选择的背景和选择 ;(set-face-foreground 'highlight "white") ;(set-face-background 'highlight "blue") ;(set-face-foreground 'region "cyan") ;(set-face-background 'region "blue") ;(set-face-foreground 'secondary-selection "skyblue") ;(set-face-background 'secondary-selection "darkblue") ;;取消滚动栏 ;(set-scroll-bar-mode nil) ;;设置滚动栏在窗口右侧,而默认是在左侧 (customize-set-variable 'scroll-bar-mode 'right) ;;取消工具栏 ;(tool-bar-mode nil) ;;全屏显示,绑定到F11 (global-set-key [f11] 'my-fullscreen) (defun my-fullscreen() (interactive) (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_FULLSCREEN" 0))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;; 显示时间设置 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (display-time-mode 1);;启用时间显示设置,在minibuffer上面的那个杠上 (setq display-time-24hr-format t);;时间使用24小时制 (setq display-time-day-and-date t);;时间显示包括日期和具体时间 (setq display-time-use-mail-icon t);;时间栏旁边启用邮件设置 (setq display-time-interval 10);;时间的变化频率,单位多少来着? ;; 语法高亮。除 shell-mode 和 text-mode 之外的模式中使用语法高亮。 ;(setq font-lock-maximum-decoration t) ;(setq font-lock-global-modes '(not shell-mode text-mode)) ;(setq font-lock-verbose t) ;(setq font-lock-maximum-size '((t . 1048576) (vm-mode . 5250000))) ;;显示行列号 (setq column-number-mode t) (setq line-number-mode t) ;;在左边显示行号.line-num.el ;(require 'linum) ;(global-linum-mode 1) ;;设置TAB键缩进为4个空格 (setq-default indent-tabs-mode nil) (setq default-tab-width 4) (setq tab-width 4) (setq c-basic-offset 4) (setq tab-stop-list ()) ;;可以递归的使用 minibuffer ;(setq enable-recursive-minibuffers t) ;;括号匹配时可以高亮显示另外一边的括号,但光标不会烦人的跳到另一个括号处。 ;(setq show-paren-mode t) ;;打开括号匹配显示模式 ;(setq show-paren-style 'parenthesis) ;;在标题上显示文件完整路径 ;(setq frame-title-format "%b") (setq frame-title-format (list (format "%s %%S: %%j " (system-name)) '(buffer-file-name "%f" (dired-directory dired-directory "%b")))) ;; 当有两个文件名相同的缓冲时,使用前缀的目录名做 buffer 名字,不用原来的foobar<?> 形式。 ;(setq uniquify-buffer-name-style 'forward);;好像没起作用 ;; Emacs 中,改变文件时,默认都会产生备份文件(以 ~ 结尾的文件)。可以完全去掉 ;; (并不可取),也可以制定备份的方式。这里采用的是,把所有的文件备份都放在一 ;; 个固定的地方("~/backups")。对于每个备份文件,保留最原始的两个版本和最新的 ;; 1个版本。并且备份的时候,备份文件是复本,而不是原件。 (setq version-control t);;启用版本控制,即可以备份多次 (setq kept-old-versions 2);;备份最原始的版本两次,及第一次编辑前的文档,和第二次编辑前的文档 (setq kept-new-versions 1);;备份最新的版本1次,理解同上 (setq delete-old-versions t);;删掉不属于以上3中版本的版本 (setq backup-directory-alist '(("." . "~/.backups/emacs")));;设置备份文件的路径 (setq backup-by-copying t);;备份设置方法,直接拷贝 ;; 设定不产生备份文件 ;(setq make-backup-files nil) ;; 当浏览 man page 时,直接跳转到 man buffer。 ;(setq Man-notify-method 'pushy) (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. '(column-number-mode t) '(display-time-mode t) '(ede-project-directories (quote ("/home/aran"))) '(scroll-bar-mode (quote right)) '(tool-bar-mode nil)) (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. '(default ((t (:inherit nil :stipple nil :background "black" :foreground "grey" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 120 :width normal :foundry "bitstream" :family "Bitstream Vera Sans Mono"))))) ;;把speedbar嵌入到emacs的窗口中,而不是新建一个窗口启动,同时绑定到F5上。 (require 'sr-speedbar) (setq sr-speedbar-right-side nil) (setq sr-speedbar-width 30) (setq speedbar-show-unknown-files t) ;(setq dframe-update-speed t) ; prevent the speedbar to update the current state, since it is always changing (global-set-key (kbd "<f5>") (lambda() (interactive) (sr-speedbar-toggle))) ;(setq ange-ftp-ftp-program-name "pftp") ;(setq ange-ftp-try-passive-mode t) ;(setq ange-ftp-ftp-program-args '("-i" "-n" "-g" "-v" "--prompt" "")) ;(require 'tjic-website "tjic-website.el") |
|
jamcode
2012-05-30
aran 写道 icefishc 写道 aran 写道 试试YASnippet吧,EMACS上的地球人都用他
YASnippet是好,不过和本帖子完全没关系啊。。。 不就是格式问题么,对于特定的语句,想怎什么样的格式就什么样的。当然也不光是这插件,基础配置也是要的。比如制表符的宽度,要不要空格去代替,看个人喜好了。 我的配置,有点乱,凑合看吧 root@orz:/home/aran# cat .emacs.d/init.el (setq user-full-name "aran") (global-set-key (kbd "C-SPC") 'nil) (global-set-key (kbd "s-<SPC>") 'set-mark-command) ;;Confirm on exit (setq confirm-kill-emacs 'y-or-n-p) (add-to-list 'load-path "~/.emacs.d/elisp/") (require 'install-elisp) (setq install-elisp-repository-directory "~/.emacs.d/elisp/") (require 'tabbar) (tabbar-mode t) (require 'tabbar-ruler) ;(setq tabbar-ruler-global-tabbar 't) ; If you want tabbar ;(setq tabbar-ruler-global-ruler 't) ; if you want a global ruler ;(setq tabbar-ruler-popup-menu 't) ; If you want a popup menu. ;(setq tabbar-ruler-popup-toolbar 't) ; If you want a popup toolbar ;(require 'mmm-mode) ;(add-hook 'mmm-mode-user-hook 'turn-on-font-lock) ;(locate-library "auto-complete.el") (require 'auto-complete) (require 'auto-complete-config) (global-auto-complete-mode t) (setq-default ac-sources '(ac-source-words-in-same-mode-buffers)) (add-hook 'emacs-lisp-mode-hook (lambda () (add-to-list 'ac-sources 'ac-source-symbols))) (add-hook 'auto-complete-mode-hook (lambda () (add-to-list 'ac-sources 'ac-source-filename))) (set-face-background 'ac-candidate-face "lightgray") (set-face-underline 'ac-candidate-face "darkgray") (set-face-background 'ac-selection-face "steelblue") ;;; 设置比上面截图中更好看的背景颜色 (define-key ac-completing-map "\M-n" 'ac-next) ;;; 列表中通过按M-n来向下移动 (define-key ac-completing-map "\M-p" 'ac-previous) (setq ac-auto-start 2) (setq ac-dwim t) (define-key ac-mode-map (kbd "M-TAB") 'auto-complete) (add-to-list 'ac-dictionary-directories "/home/aran/.emacs.d/elisp/ac-dict") (ac-config-default) (add-to-list 'load-path "~/.emacs.d/elisp/yasnippet") (require 'yasnippet) ;;(setq yas/snippet-dirs '("~/.emacs.d/snippets" "~/.emacs.d/extras/imported")) (yas/global-mode 1) (add-to-list 'load-path "~/.emacs.d/elisp/multi-web-mode") (require 'multi-web-mode) (setq mweb-default-major-mode 'html-mode) (setq mweb-tags '((php-mode "<\\?php\\|<\\? \\|<\\?=" "\\?>") (js-mode "<script +\\(type=\"text/javascript\"\\|language=\"javascript\"\\)[^>]*>" "</script>") (css-mode "<style +type=\"text/css\"[^>]*>" "</style>"))) (setq mweb-filename-extensions '("php" "htm" "html" "ctp" "phtml" "php4" "php5")) (multi-web-global-mode 1) ;(load "~/.emacs.d/elisp/nxhtml/autostart.el") ;(add-hook 'php-mode-hook ;(lambda() ;(require 'php-completion) ;(php-completion-mode t) ;(define-key php-mode-map (kbd "C-c p") 'phpcmp-complete) ;(when (require 'auto-complete nol t) ;(make-variable-buffer-local 'ac-sources) ;(add-to-list 'ac-sources 'ac-source-php-completion) ;(auto-complete-mode t)))) ;(load-file "~/.emacs.d/elisp/google-c-style.el") ;(add-hook 'c-mode-common-hook 'google-set-c-style) ;(add-hook 'c-mode-common-hook 'google-make-newline-indent) ;(setq c-default-style "linux" ; c-basic-offset 4) ;(c-set-offset 'case-label '+) (autoload 'php-mode "~/.elisp/php-mode.el" "Major mode for editing php code." t) (add-to-list 'auto-mode-alist '("\\.php\\'\\|\\.phtml\\'" . php-mode)) (add-to-list 'auto-mode-alist '("\\.module$" . php-mode)) (add-to-list 'auto-mode-alist '("\\.inc$" . php-mode)) (load-library "hideshow") (add-hook 'c-mode-hook '(lambda() ;;(set 'indent-tabs-mode nil) (c-set-style "k&r") (c-set-offset 'case-label '+) ;;(c-set-offset 'arglist-close 0) ;;(c-set-offset 'arglist-intro '+) ;;(c-set-offset 'arglist-cont-nonempty 'c-lineup-math) ;;(c-toggle-hungry-state) ;;(c-toggle-auto-state) (setq c-basic-offset 4) )) (defconst my-php-style '((c-offsets-alist . ( (arglist-close . c-lineup-close-paren) ; correct arglist closing parenthesis ))) "My PHP Programming style" ) (c-add-style "my-php-style" my-php-style) (defun my-php-mode () "My personal php-mode customizations." (c-set-style "my-php-style") ; More generic PHP customizations here ) ;;PHP ;(add-hook 'php-mode-hook 'my-php-mode) ;;;;;;;;;;;;;;;;;;;;;;;;;;; 设置窗口界面 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;(set-foreground-color "grey") ;(set-background-color "black") ;(set-cursor-color "gold1") ;(set-mouse-color "gold1") (setq default-frame-alist '((vertical-scroll-bars) (top . 25) (left . 45) (width . 120) (height . 40) (background-color . "black") (foreground-color . "grey") (cursor-color . "gold1") (mouse-color . "gold1") (tool-bar-lines . 0) (menu-bar-lines . 1) (right-fringe) (left-fringe))) ;; 设置另外一些颜色:语法高亮显示的背景和主题,区域选择的背景和主题,二次选择的背景和选择 ;(set-face-foreground 'highlight "white") ;(set-face-background 'highlight "blue") ;(set-face-foreground 'region "cyan") ;(set-face-background 'region "blue") ;(set-face-foreground 'secondary-selection "skyblue") ;(set-face-background 'secondary-selection "darkblue") ;;取消滚动栏 ;(set-scroll-bar-mode nil) ;;设置滚动栏在窗口右侧,而默认是在左侧 (customize-set-variable 'scroll-bar-mode 'right) ;;取消工具栏 ;(tool-bar-mode nil) ;;全屏显示,绑定到F11 (global-set-key [f11] 'my-fullscreen) (defun my-fullscreen() (interactive) (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_FULLSCREEN" 0))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;; 显示时间设置 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (display-time-mode 1);;启用时间显示设置,在minibuffer上面的那个杠上 (setq display-time-24hr-format t);;时间使用24小时制 (setq display-time-day-and-date t);;时间显示包括日期和具体时间 (setq display-time-use-mail-icon t);;时间栏旁边启用邮件设置 (setq display-time-interval 10);;时间的变化频率,单位多少来着? ;; 语法高亮。除 shell-mode 和 text-mode 之外的模式中使用语法高亮。 ;(setq font-lock-maximum-decoration t) ;(setq font-lock-global-modes '(not shell-mode text-mode)) ;(setq font-lock-verbose t) ;(setq font-lock-maximum-size '((t . 1048576) (vm-mode . 5250000))) ;;显示行列号 (setq column-number-mode t) (setq line-number-mode t) ;;在左边显示行号.line-num.el ;(require 'linum) ;(global-linum-mode 1) ;;设置TAB键缩进为4个空格 (setq-default indent-tabs-mode nil) (setq default-tab-width 4) (setq tab-width 4) (setq c-basic-offset 4) (setq tab-stop-list ()) ;;可以递归的使用 minibuffer ;(setq enable-recursive-minibuffers t) ;;括号匹配时可以高亮显示另外一边的括号,但光标不会烦人的跳到另一个括号处。 ;(setq show-paren-mode t) ;;打开括号匹配显示模式 ;(setq show-paren-style 'parenthesis) ;;在标题上显示文件完整路径 ;(setq frame-title-format "%b") (setq frame-title-format (list (format "%s %%S: %%j " (system-name)) '(buffer-file-name "%f" (dired-directory dired-directory "%b")))) ;; 当有两个文件名相同的缓冲时,使用前缀的目录名做 buffer 名字,不用原来的foobar<?> 形式。 ;(setq uniquify-buffer-name-style 'forward);;好像没起作用 ;; Emacs 中,改变文件时,默认都会产生备份文件(以 ~ 结尾的文件)。可以完全去掉 ;; (并不可取),也可以制定备份的方式。这里采用的是,把所有的文件备份都放在一 ;; 个固定的地方("~/backups")。对于每个备份文件,保留最原始的两个版本和最新的 ;; 1个版本。并且备份的时候,备份文件是复本,而不是原件。 (setq version-control t);;启用版本控制,即可以备份多次 (setq kept-old-versions 2);;备份最原始的版本两次,及第一次编辑前的文档,和第二次编辑前的文档 (setq kept-new-versions 1);;备份最新的版本1次,理解同上 (setq delete-old-versions t);;删掉不属于以上3中版本的版本 (setq backup-directory-alist '(("." . "~/.backups/emacs")));;设置备份文件的路径 (setq backup-by-copying t);;备份设置方法,直接拷贝 ;; 设定不产生备份文件 ;(setq make-backup-files nil) ;; 当浏览 man page 时,直接跳转到 man buffer。 ;(setq Man-notify-method 'pushy) (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. '(column-number-mode t) '(display-time-mode t) '(ede-project-directories (quote ("/home/aran"))) '(scroll-bar-mode (quote right)) '(tool-bar-mode nil)) (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. '(default ((t (:inherit nil :stipple nil :background "black" :foreground "grey" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 120 :width normal :foundry "bitstream" :family "Bitstream Vera Sans Mono"))))) ;;把speedbar嵌入到emacs的窗口中,而不是新建一个窗口启动,同时绑定到F5上。 (require 'sr-speedbar) (setq sr-speedbar-right-side nil) (setq sr-speedbar-width 30) (setq speedbar-show-unknown-files t) ;(setq dframe-update-speed t) ; prevent the speedbar to update the current state, since it is always changing (global-set-key (kbd "<f5>") (lambda() (interactive) (sr-speedbar-toggle))) ;(setq ange-ftp-ftp-program-name "pftp") ;(setq ange-ftp-try-passive-mode t) ;(setq ange-ftp-ftp-program-args '("-i" "-n" "-g" "-v" "--prompt" "")) ;(require 'tjic-website "tjic-website.el") 可能你没明白我说的问题。问题是Emacs的缩进总是按对应mode的语法来,不能自由缩进,当比如javascript-mode的语法缩进有问题的时候,你就只有自我腌割了。有些缩进的处理,Emacs的一些mode都处理不好。 比如PHP中的Here Doc String的写法: $s=<<<DOC asfsa asdfsa adfasdfsda adfasdf asdfsaf asfsadf sdafsafsa DOC; 你输入上面的字符串试试,注意其中的空白都是Tab |
|
icefishc
2012-05-30
aran 写道 icefishc 写道 aran 写道 试试YASnippet吧,EMACS上的地球人都用他
YASnippet是好,不过和本帖子完全没关系啊。。。 不就是格式问题么,对于特定的语句,想怎什么样的格式就什么样的。当然也不光是这插件,基础配置也是要的。比如制表符的宽度,要不要空格去代替,看个人喜好了。 我的配置,有点乱,凑合看吧 root@orz:/home/aran# cat .emacs.d/init.el (setq user-full-name "aran") (global-set-key (kbd "C-SPC") 'nil) (global-set-key (kbd "s-<SPC>") 'set-mark-command) ;;Confirm on exit (setq confirm-kill-emacs 'y-or-n-p) (add-to-list 'load-path "~/.emacs.d/elisp/") (require 'install-elisp) (setq install-elisp-repository-directory "~/.emacs.d/elisp/") (require 'tabbar) (tabbar-mode t) (require 'tabbar-ruler) ;(setq tabbar-ruler-global-tabbar 't) ; If you want tabbar ;(setq tabbar-ruler-global-ruler 't) ; if you want a global ruler ;(setq tabbar-ruler-popup-menu 't) ; If you want a popup menu. ;(setq tabbar-ruler-popup-toolbar 't) ; If you want a popup toolbar ;(require 'mmm-mode) ;(add-hook 'mmm-mode-user-hook 'turn-on-font-lock) ;(locate-library "auto-complete.el") (require 'auto-complete) (require 'auto-complete-config) (global-auto-complete-mode t) (setq-default ac-sources '(ac-source-words-in-same-mode-buffers)) (add-hook 'emacs-lisp-mode-hook (lambda () (add-to-list 'ac-sources 'ac-source-symbols))) (add-hook 'auto-complete-mode-hook (lambda () (add-to-list 'ac-sources 'ac-source-filename))) (set-face-background 'ac-candidate-face "lightgray") (set-face-underline 'ac-candidate-face "darkgray") (set-face-background 'ac-selection-face "steelblue") ;;; 设置比上面截图中更好看的背景颜色 (define-key ac-completing-map "\M-n" 'ac-next) ;;; 列表中通过按M-n来向下移动 (define-key ac-completing-map "\M-p" 'ac-previous) (setq ac-auto-start 2) (setq ac-dwim t) (define-key ac-mode-map (kbd "M-TAB") 'auto-complete) (add-to-list 'ac-dictionary-directories "/home/aran/.emacs.d/elisp/ac-dict") (ac-config-default) (add-to-list 'load-path "~/.emacs.d/elisp/yasnippet") (require 'yasnippet) ;;(setq yas/snippet-dirs '("~/.emacs.d/snippets" "~/.emacs.d/extras/imported")) (yas/global-mode 1) (add-to-list 'load-path "~/.emacs.d/elisp/multi-web-mode") (require 'multi-web-mode) (setq mweb-default-major-mode 'html-mode) (setq mweb-tags '((php-mode "<\\?php\\|<\\? \\|<\\?=" "\\?>") (js-mode "<script +\\(type=\"text/javascript\"\\|language=\"javascript\"\\)[^>]*>" "</script>") (css-mode "<style +type=\"text/css\"[^>]*>" "</style>"))) (setq mweb-filename-extensions '("php" "htm" "html" "ctp" "phtml" "php4" "php5")) (multi-web-global-mode 1) ;(load "~/.emacs.d/elisp/nxhtml/autostart.el") ;(add-hook 'php-mode-hook ;(lambda() ;(require 'php-completion) ;(php-completion-mode t) ;(define-key php-mode-map (kbd "C-c p") 'phpcmp-complete) ;(when (require 'auto-complete nol t) ;(make-variable-buffer-local 'ac-sources) ;(add-to-list 'ac-sources 'ac-source-php-completion) ;(auto-complete-mode t)))) ;(load-file "~/.emacs.d/elisp/google-c-style.el") ;(add-hook 'c-mode-common-hook 'google-set-c-style) ;(add-hook 'c-mode-common-hook 'google-make-newline-indent) ;(setq c-default-style "linux" ; c-basic-offset 4) ;(c-set-offset 'case-label '+) (autoload 'php-mode "~/.elisp/php-mode.el" "Major mode for editing php code." t) (add-to-list 'auto-mode-alist '("\\.php\\'\\|\\.phtml\\'" . php-mode)) (add-to-list 'auto-mode-alist '("\\.module$" . php-mode)) (add-to-list 'auto-mode-alist '("\\.inc$" . php-mode)) (load-library "hideshow") (add-hook 'c-mode-hook '(lambda() ;;(set 'indent-tabs-mode nil) (c-set-style "k&r") (c-set-offset 'case-label '+) ;;(c-set-offset 'arglist-close 0) ;;(c-set-offset 'arglist-intro '+) ;;(c-set-offset 'arglist-cont-nonempty 'c-lineup-math) ;;(c-toggle-hungry-state) ;;(c-toggle-auto-state) (setq c-basic-offset 4) )) (defconst my-php-style '((c-offsets-alist . ( (arglist-close . c-lineup-close-paren) ; correct arglist closing parenthesis ))) "My PHP Programming style" ) (c-add-style "my-php-style" my-php-style) (defun my-php-mode () "My personal php-mode customizations." (c-set-style "my-php-style") ; More generic PHP customizations here ) ;;PHP ;(add-hook 'php-mode-hook 'my-php-mode) ;;;;;;;;;;;;;;;;;;;;;;;;;;; 设置窗口界面 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;(set-foreground-color "grey") ;(set-background-color "black") ;(set-cursor-color "gold1") ;(set-mouse-color "gold1") (setq default-frame-alist '((vertical-scroll-bars) (top . 25) (left . 45) (width . 120) (height . 40) (background-color . "black") (foreground-color . "grey") (cursor-color . "gold1") (mouse-color . "gold1") (tool-bar-lines . 0) (menu-bar-lines . 1) (right-fringe) (left-fringe))) ;; 设置另外一些颜色:语法高亮显示的背景和主题,区域选择的背景和主题,二次选择的背景和选择 ;(set-face-foreground 'highlight "white") ;(set-face-background 'highlight "blue") ;(set-face-foreground 'region "cyan") ;(set-face-background 'region "blue") ;(set-face-foreground 'secondary-selection "skyblue") ;(set-face-background 'secondary-selection "darkblue") ;;取消滚动栏 ;(set-scroll-bar-mode nil) ;;设置滚动栏在窗口右侧,而默认是在左侧 (customize-set-variable 'scroll-bar-mode 'right) ;;取消工具栏 ;(tool-bar-mode nil) ;;全屏显示,绑定到F11 (global-set-key [f11] 'my-fullscreen) (defun my-fullscreen() (interactive) (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_FULLSCREEN" 0))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;; 显示时间设置 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (display-time-mode 1);;启用时间显示设置,在minibuffer上面的那个杠上 (setq display-time-24hr-format t);;时间使用24小时制 (setq display-time-day-and-date t);;时间显示包括日期和具体时间 (setq display-time-use-mail-icon t);;时间栏旁边启用邮件设置 (setq display-time-interval 10);;时间的变化频率,单位多少来着? ;; 语法高亮。除 shell-mode 和 text-mode 之外的模式中使用语法高亮。 ;(setq font-lock-maximum-decoration t) ;(setq font-lock-global-modes '(not shell-mode text-mode)) ;(setq font-lock-verbose t) ;(setq font-lock-maximum-size '((t . 1048576) (vm-mode . 5250000))) ;;显示行列号 (setq column-number-mode t) (setq line-number-mode t) ;;在左边显示行号.line-num.el ;(require 'linum) ;(global-linum-mode 1) ;;设置TAB键缩进为4个空格 (setq-default indent-tabs-mode nil) (setq default-tab-width 4) (setq tab-width 4) (setq c-basic-offset 4) (setq tab-stop-list ()) ;;可以递归的使用 minibuffer ;(setq enable-recursive-minibuffers t) ;;括号匹配时可以高亮显示另外一边的括号,但光标不会烦人的跳到另一个括号处。 ;(setq show-paren-mode t) ;;打开括号匹配显示模式 ;(setq show-paren-style 'parenthesis) ;;在标题上显示文件完整路径 ;(setq frame-title-format "%b") (setq frame-title-format (list (format "%s %%S: %%j " (system-name)) '(buffer-file-name "%f" (dired-directory dired-directory "%b")))) ;; 当有两个文件名相同的缓冲时,使用前缀的目录名做 buffer 名字,不用原来的foobar<?> 形式。 ;(setq uniquify-buffer-name-style 'forward);;好像没起作用 ;; Emacs 中,改变文件时,默认都会产生备份文件(以 ~ 结尾的文件)。可以完全去掉 ;; (并不可取),也可以制定备份的方式。这里采用的是,把所有的文件备份都放在一 ;; 个固定的地方("~/backups")。对于每个备份文件,保留最原始的两个版本和最新的 ;; 1个版本。并且备份的时候,备份文件是复本,而不是原件。 (setq version-control t);;启用版本控制,即可以备份多次 (setq kept-old-versions 2);;备份最原始的版本两次,及第一次编辑前的文档,和第二次编辑前的文档 (setq kept-new-versions 1);;备份最新的版本1次,理解同上 (setq delete-old-versions t);;删掉不属于以上3中版本的版本 (setq backup-directory-alist '(("." . "~/.backups/emacs")));;设置备份文件的路径 (setq backup-by-copying t);;备份设置方法,直接拷贝 ;; 设定不产生备份文件 ;(setq make-backup-files nil) ;; 当浏览 man page 时,直接跳转到 man buffer。 ;(setq Man-notify-method 'pushy) (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. '(column-number-mode t) '(display-time-mode t) '(ede-project-directories (quote ("/home/aran"))) '(scroll-bar-mode (quote right)) '(tool-bar-mode nil)) (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. '(default ((t (:inherit nil :stipple nil :background "black" :foreground "grey" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 120 :width normal :foundry "bitstream" :family "Bitstream Vera Sans Mono"))))) ;;把speedbar嵌入到emacs的窗口中,而不是新建一个窗口启动,同时绑定到F5上。 (require 'sr-speedbar) (setq sr-speedbar-right-side nil) (setq sr-speedbar-width 30) (setq speedbar-show-unknown-files t) ;(setq dframe-update-speed t) ; prevent the speedbar to update the current state, since it is always changing (global-set-key (kbd "<f5>") (lambda() (interactive) (sr-speedbar-toggle))) ;(setq ange-ftp-ftp-program-name "pftp") ;(setq ange-ftp-try-passive-mode t) ;(setq ange-ftp-ftp-program-args '("-i" "-n" "-g" "-v" "--prompt" "")) ;(require 'tjic-website "tjic-website.el") 用yasnippet解决格式问题倒是有新意。 不过这个有问题啊。 如果有很多snippet难道要挨个去调格式啊。 再说这东西也不方面啊。 不是所有的代码都能由snippet插入。 而且在要是批量修改格式的时候更是帮不上忙了. 我的习惯是在插入snippet之后自动格式化一下被插入的代码。 |
|
icefishc
2012-05-30
jamcode 写道 可能你没明白我说的问题。问题是Emacs的缩进总是按对应mode的语法来,不能自由缩进,当比如javascript-mode的语法缩进有问题的时候,你就只有自我腌割了。有些缩进的处理,Emacs的一些mode都处理不好。
比如PHP中的Here Doc String的写法: 自由缩进指的是什么? 一般常见的的缩进风格在emacs中都能找到吧。 |
|
aran
2012-05-30
jamcode 写道 可能你没明白我说的问题。问题是Emacs的缩进总是按对应mode的语法来,不能自由缩进,当比如javascript-mode的语法缩进有问题的时候,你就只有自我腌割了。有些缩进的处理,Emacs的一些mode都处理不好。 比如PHP中的Here Doc String的写法: $s=<<<DOC asfsa asdfsa adfasdfsda adfasdf asdfsaf asfsadf sdafsafsa DOC; 你输入上面的字符串试试,注意其中的空白都是Tab 你说A问题,然后A有了回复,你说你在说B问题。现在你说的B问题,我这也正常。TAB键是个多功能键,你连什么是缩进什么跳格都没搞清楚,上来就是XX太操蛋了,你说是你的问题还是XX的问题?关键你要解决什么问题,你难道要写一句代码同时包含JS,python,php等语言? “问题是Emacs的缩进总是按对应mode的语法来” >>>只有在相关mode里做了设置,才会按对应的设置去显示,不然是按全局配置显示。 abceeeeeeeeeeeee = [ a : 1, b : 2, ]; 你所说的这代码,我输入的时候没有用到YASnippet模板,就是正常的输入,并且支持C-M-\格式化,真没"腌割"EMACS。 “有些缩进的处理,Emacs的一些mode都处理不好。” >>>哪些mode在你眼是处理的好的? 最后,我很好奇,LZ是做啥开发的?在配置EMACS上花了多少时间?能把你的EMACS配置帖出来吗? |
|
aran
2012-05-30
icefishc 写道 用yasnippet解决格式问题倒是有新意。 不过这个有问题啊。 如果有很多snippet难道要挨个去调格式啊。 再说这东西也不方面啊。 不是所有的代码都能由snippet插入。 而且在要是批量修改格式的时候更是帮不上忙了. 我的习惯是在插入snippet之后自动格式化一下被插入的代码。 那代码真没用YASnippet模板,支持C-M-\格式化,当然YASnippet模板最好配合对应语法,这样才有意义。 |
|
icefishc
2012-05-30
aran 写道 icefishc 写道 用yasnippet解决格式问题倒是有新意。 不过这个有问题啊。 如果有很多snippet难道要挨个去调格式啊。 再说这东西也不方面啊。 不是所有的代码都能由snippet插入。 而且在要是批量修改格式的时候更是帮不上忙了. 我的习惯是在插入snippet之后自动格式化一下被插入的代码。 那代码真没用YASnippet模板,支持C-M-\格式化,当然YASnippet模板最好配合对应语法,这样才有意义。 我不就是这个意思么。。。 和你说得不冲突啊 |
|
luolonghao
2012-05-30
我的dot emacs, http://emacs.group.iteye.com/group/topic/9409
上面缩进是写Perl的时候,当时找过解决方案,不知道在哪里配置。 还有编辑 HTML, JS, CSS, PHP 混合代码时缩进一直有问题,一直没找到满意的解决方案,试过emacswiki上的几个插件都不太理想。 |
|
luolonghao
2012-05-30
yasnippet 好像可以解决我说的问题,改天试试。
|