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 好像可以解决我说的问题,改天试试。
Global site tag (gtag.js) - Google Analytics