e模式) (defvar)编程模式 '(emacs lisp模式模式模式模式lisp模式c模式c++-模式 objc模式乳胶模式普通tex模式java模式 php模式css模式js2模式nxml模式nxhtml模式) “与编程相关的模式列表”) ; 文本匹配样式缩进 (defadvice yank(缩进区域激活后) (如果(成员主要模式编程模式) (缩进区域(区域开始)(区域结束)无)

e模式) (defvar)编程模式 '(emacs lisp模式模式模式模式lisp模式c模式c++-模式 objc模式乳胶模式普通tex模式java模式 php模式css模式js2模式nxml模式nxhtml模式) “与编程相关的模式列表”) ; 文本匹配样式缩进 (defadvice yank(缩进区域激活后) (如果(成员主要模式编程模式) (缩进区域(区域开始)(区域结束)无),emacs,text-editor,elisp,dot-emacs,Emacs,Text Editor,Elisp,Dot Emacs,我使用paredit进行简单的(e)lisp处理和ido模式的小型缓冲区完成 我需要将yes或no提示更改为y或n提示: (fset 'yes-or-no-p 'y-or-n-p) 我有这些开始Emacs没有这么多的“大张旗鼓”,我从 和函数重命名正在编辑的文件及其相应的缓冲区: (defun rename-file-and-buffer (new-name) "Renames both current buffer and file it's visiting to NEW-NAME."

我使用paredit进行简单的(e)lisp处理和ido模式的小型缓冲区完成

我需要将
yes
no
提示更改为
y
n
提示:

(fset 'yes-or-no-p 'y-or-n-p)
我有这些开始Emacs没有这么多的“大张旗鼓”,我从

和函数重命名正在编辑的文件及其相应的缓冲区:

(defun rename-file-and-buffer (new-name)
  "Renames both current buffer and file it's visiting to NEW-NAME."
  (interactive "sNew name: ")
  (let ((name (buffer-name))
 (filename (buffer-file-name)))
    (if (not filename)
 (message "Buffer '%s' is not visiting a file!" name)
      (if (get-buffer new-name)
   (message "A buffer named '%s' already exists!" new-name)
 (progn
   (rename-file name new-name 1)
   (rename-buffer new-name)
   (set-visited-file-name new-name)
   (set-buffer-modified-p nil))))))

我最喜欢的片段。Emacs的终极魅力在于:

;; real lisp hackers use the lambda character
;; courtesy of stefan monnier on c.l.l
(defun sm-lambda-mode-hook ()
  (font-lock-add-keywords
   nil `(("\\<lambda\\>"
   (0 (progn (compose-region (match-beginning 0) (match-end 0)
        ,(make-char 'greek-iso8859-7 107))
      nil))))))
(add-hook 'emacs-lisp-mode-hook 'sm-lambda-mode-hook)
(add-hook 'lisp-interactive-mode-hook 'sm-lamba-mode-hook)
(add-hook 'scheme-mode-hook 'sm-lambda-mode-hook)

从Emacs中刷新正在编辑的网页

(defun moz-connect()
  (interactive)
  (make-comint "moz-buffer" (cons "127.0.0.1" "4242"))
  (global-set-key "\C-x\C-g" '(lambda () 
                (interactive)
                (save-buffer)
                (comint-send-string "*moz-buffer*" "this.BrowserReload()\n"))))

结合使用一件非常有用的事情:在它变得太大之前,尝试将其拆分为多个文件以执行各种任务:My.emacs只设置加载路径并加载一组文件-我在
mode configs.el
中设置了所有特定于模式的设置,在
keys.el
中设置了keybindings,诸如此类

我已经提到了很多其他方面,但我认为这些是绝对必要的:

(transient-mark-mode 1) ; makes the region visible
(line-number-mode 1)    ; makes the line number show up
(column-number-mode 1)  ; makes the column number show up

这一块对我来说是最重要的:

(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)

不过,我一直不清楚这两者之间的区别。我猜是货运邪教…

使用。在此处添加您的“.emacs”。阅读其他人的“.emacs”。

您可以在上找到我的配置(html和tar'ed存档)。它包含许多不同模式的设置

我使用webjump设置了一些方便的网页快捷方式和搜索

(require 'webjump)
(global-set-key [f2] 'webjump)
(setq webjump-sites
      (append '(
        ("Reddit Search" .
         [simple-query "www.reddit.com" "http://www.reddit.com/search?q=" ""])
        ("Google Image Search" .
         [simple-query "images.google.com" "images.google.com/images?hl=en&q=" ""])
        ("Flickr Search" .
         [simple-query "www.flickr.com" "flickr.com/search/?q=" ""])
        ("Astar algorithm" . 
         "http://www.heyes-jones.com/astar")
        )
          webjump-sample-sites))
关于如何在这里工作的博客文章

我还建议:

(setq visible-bell t) ; no beeping

(setq transient-mark-mode t) ; visually show region

(setq line-number-mode t) ; show line numbers

(setq global-font-lock-mode 1) ; everything should use fonts

(setq font-lock-maximum-decoration t)
我还去掉了一些多余的gui内容

  (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)))

一行用于修改加载路径 一行加载我的init库 一行加载我的emacs init文件


当然,“emacs init文件”相当多,每个特定的东西一个,以确定的顺序加载。

很难回答这个问题,因为每个人使用emacs的目的都非常不同


此外,一个更好的做法可能是亲吻你的电脑。由于在Emacs的模式中广泛支持,您应该将所有自定义项存储在
自定义文件中
(这可能是dotemacs中的一个单独位置),对于,只将加载路径设置、包要求、挂钩和键绑定放在其中。一旦您开始使用,一整套有用的设置也可能从您的dotemacs中删除。

My.emacs只有127行,以下是最有用的小片段:

;; keep backup files neatly out of the way in .~/
(setq backup-directory-alist '(("." . ".~")))
在本例中,这会使目录中杂乱无章的*~文件进入一个特殊目录~

;; uniquify changes conflicting buffer names from file<2> etc
(require 'uniquify)
(setq uniquify-buffer-name-style 'reverse)
(setq uniquify-separator "/")
(setq uniquify-after-kill-buffer-p t) ; rename after killing uniquified
(setq uniquify-ignore-buffers-re "^\\*") ; don't muck with special buffers
;;uniquify更改文件等中冲突的缓冲区名称
(需要“uniquify”)
(setq uniquify缓冲区名称样式“反向”)
(setq未限定分隔符“/)
(setq uniquify-after-kill-buffer-PT);杀人后改名
(setq uniquify ignore buffers re“^\\\*”);不要弄脏特殊的缓冲器
这将设置uniquify,它可以将多个文件具有相同名称时得到的那些丑陋的文件等缓冲区名称更改为一个更整洁、明确的名称,并尽可能多地使用文件的整个路径

就这样。。。其余的都是非常标准的东西,我相信每个人都知道。

作为基础,我添加了
vimpulse.el
whitespace.el
yasnippet
textmate.el
newsticker.el

在我的~/.emacs.d/$USERNAME.el(dbr.el)文件中:


始终将我的配置保存在svn中阅读本文后,我认为最好有一个简单的站点,只进行最好的.emacs修改。请随意在此处发布和投票:


我尽量使.emacs井然有序。配置将始终是一项正在进行的工作,但我开始对总体结构感到满意

所有内容都在
~/.elisp
目录下,该目录受版本控制(如果感兴趣的话,我使用git)
~/.emacs
只是指向
~/.elisp/dotemacs
,它本身只是加载
~/.elisp/cfg/init
。该文件依次通过
require
导入各种配置文件。这意味着配置文件需要像模式一样工作:它们导入所依赖的内容,并在文件末尾提供它们自己,例如
(提供'my ibuffer cfg)
。我用
my-
作为配置中定义的所有标识符的前缀

我根据模式/主题/任务组织配置,而不是根据它们的技术含义,例如,我没有一个单独的配置文件,其中定义了所有键绑定或面

My
init.el
定义了以下钩子,以确保在保存时Emacs重新编译配置文件(编译的Elisp加载速度快得多,但我不想手动执行此步骤):

这是
~/.elisp
的目录结构:

~/.elisp/todo.org
:组织模式文件,其中我跟踪仍需要完成的工作(+愿望列表项)

~/.elisp/dotemacs
:用于
~/.emacs
的符号链接目标,加载
~/.elisp/cfg/init

~/.elisp/cfg
:我自己的配置文件

~/.elisp/modes
:仅由单个文件组成的模式

~/.elisp/packages
:具有lisp、文档和可能的资源文件的复杂模式

我使用GNU Emacs,该版本对包没有真正的支持。因此,我手动组织它们,通常如下所示:
~/.elisp/packages/foobar-0.1.3
是包的根目录。子目录
lisp
保存所有lisp文件,并且
info
(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
(require 'webjump)
(global-set-key [f2] 'webjump)
(setq webjump-sites
      (append '(
        ("Reddit Search" .
         [simple-query "www.reddit.com" "http://www.reddit.com/search?q=" ""])
        ("Google Image Search" .
         [simple-query "images.google.com" "images.google.com/images?hl=en&q=" ""])
        ("Flickr Search" .
         [simple-query "www.flickr.com" "flickr.com/search/?q=" ""])
        ("Astar algorithm" . 
         "http://www.heyes-jones.com/astar")
        )
          webjump-sample-sites))
(setq visible-bell t) ; no beeping

(setq transient-mark-mode t) ; visually show region

(setq line-number-mode t) ; show line numbers

(setq global-font-lock-mode 1) ; everything should use fonts

(setq font-lock-maximum-decoration t)
  (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)))
;; keep backup files neatly out of the way in .~/
(setq backup-directory-alist '(("." . ".~")))
;; uniquify changes conflicting buffer names from file<2> etc
(require 'uniquify)
(setq uniquify-buffer-name-style 'reverse)
(setq uniquify-separator "/")
(setq uniquify-after-kill-buffer-p t) ; rename after killing uniquified
(setq uniquify-ignore-buffers-re "^\\*") ; don't muck with special buffers
(add-to-list 'load-path (concat dotfiles-dir "/vendor/"))

;; Snippets
(add-to-list 'load-path "~/.emacs.d/vendor/yasnippet/")
(require 'yasnippet)

(yas/initialize)
(yas/load-directory "~/.emacs.d/vendor/yasnippet/snippets")

;; TextMate module
(require 'textmate)
(textmate-mode 'on)

;; Whitespace module
(require 'whitespace)
(add-hook 'ruby-mode-hook 'whitespace-mode)
(add-hook 'python-mode-hook 'whitespace-mode)

;; Misc
(flyspell-mode 'on)
(setq viper-mode t)
(require 'viper)
(require 'vimpulse)

;; IM
(eval-after-load 'rcirc '(require 'rcirc-color))
(setq rcirc-default-nick "_dbr")
(setq rcirc-default-user-name "_dbr")
(setq rcirc-default-user-full-name "_dbr")

(require 'jabber)

;;; Google Talk account
(custom-set-variables
 '(jabber-connection-type (quote ssl))
 '(jabber-network-server "talk.google.com")
 '(jabber-port 5223)
 '(jabber-server "mysite.tld")
 '(jabber-username "myusername"))

;; Theme
(color-theme-zenburn)

;; Key bindings
(global-set-key (kbd "M-z") 'undo)
(global-set-key (kbd "M-s") 'save-buffer)
(global-set-key (kbd "M-S-z") 'redo)
;; byte compile config file if changed
(add-hook 'after-save-hook
          '(lambda ()
                   (when (string-match
                          (concat (expand-file-name "~/.elisp/cfg/") ".*\.el$")
                          buffer-file-name)
           (byte-compile-file buffer-file-name))))
(defun insertdate ()
  (interactive)
  (insert (format-time-string "%Y-%m-%d")))

(global-set-key [(f5)] 'insertdate)
(defun createclass ()
  (interactive)
  (setq classname (file-name-sans-extension (file-name-nondirectory   buffer-file-name)))
  (insert 
"/**
  * " classname".h 
  *
  * Author: Your Mom
  * Modified: " (format-time-string "%Y-%m-%d") "
  * Licence: GNU GPL
  */
#ifndef "(upcase classname)"
#define "(upcase classname)"

class " classname "
{
  public:
    "classname"();
    ~"classname"();

  private:

};
#endif
"))
(setq skeleton-pair t)
(setq skeleton-pair-on-word t)
(global-set-key (kbd "[") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "{") 'skeleton-pair-insert-maybe) 
(global-set-key (kbd "<") 'skeleton-pair-insert-maybe)
;; Load the ensime lisp code... http://github.com/aemoncannon/ensime
(add-to-list 'load-path "ENSIME_ROOT/elisp/")
(require 'ensime)
;; This step causes the ensime-mode to be started whenever ;; scala-mode is started for a buffer. You may have to customize this step ;; if you're not using the standard scala mode.
(add-hook 'scala-mode-hook 'ensime-scala-mode-hook)
;; MINI HOWTO:  ;; Open .scala file. M-x ensime (once per project)
;Down/UP the current line
(global-set-key '[(control x) (up)] 'my-up-line)
(global-set-key '[(control x) (down)] 'my-down-line)
(defun my-down-line()
  (interactive)
  (let ((col (current-column)))
    (forward-line 1)
    (transpose-lines 1)
    (forward-line -1)
    (forward-char col)
    )
  )

(defun my-up-line()
  (interactive)
  (let ((col (current-column)))
    (transpose-lines 1)
    (forward-line -2)
    (forward-char col)
    )
  )