Pergunta

Eu tenho mudado computadores algumas vezes recentemente, e em algum lugar ao longo do caminho eu perdi meu .emacs. Estou tentando construí-la novamente, mas enquanto eu estou nele, eu pensei que eu ia pegar outras configurações boas que outras pessoas usam.

Então, se você usar Emacs, o que está em o .emacs?

O meu é belos estéril agora, contendo apenas:

  1. -lock-mode fonte global! (global-font-lock-mode 1)
  2. As minhas preferências pessoais com relação ao recuo, tabulações e espaços.
  3. Use cperl-mode, em vez de em modo perl.
  4. Um atalho para a compilação.

O que você acha que é útil?

Foi útil?

Solução

Use a dotfiles finais local . Adicione seus' .emacs' aqui. Leia as' .emacs' dos outros.

Outras dicas

Meu trecho favorito. A última palavra em Emacs colírio para os olhos:

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

Assim, você vê isto é o seguinte ao editar lisp / esquema:

(global-set-key "^Cr" '(λ () (interactive) (revert-buffer t t nil)))

Eu tenho essa a mudança yes ou no prompt para y ou n prompts:

(fset 'yes-or-no-p 'y-or-n-p)

Eu tenho estes para começar Emacs sem tanto "alarde", que eu tenho de esta questão .

(setq inhibit-startup-echo-area-message t)
(setq inhibit-startup-message t)

função de Steve Yegge para renomear um arquivo que você' re edição, juntamente com o seu tamp correspondente:

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

Uma coisa que pode ser muito útil: Antes que fique muito grande, tente dividi-lo em vários arquivos para várias tarefas: Meus .emacs apenas define a minha carga-caminho e as cargas de um monte de arquivos - Eu tenho todo minhas configurações específicas do modo em mode-configs.el, keybindings em keys.el, et cetera

As minhas .emacs é apenas 127 linhas, aqui estão os a maioria dos trechos pouco útil:

;; keep backup files neatly out of the way in .~/
(setq backup-directory-alist '(("." . ".~")))

Isso faz com que os arquivos * ~ que eu acho atravancam o diretório em um diretório especial, neste caso. ~

;; 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

Isso configura uniquify que muda os arquivos feio <2> etc. tampão nomes que você começa quando vários arquivos têm o mesmo nome em um nome inequívoco muito mais puro usando o máximo de todo o caminho do arquivo, pois tem a.

Isso é sobre ele ... o resto é coisa bastante normal que eu tenho certeza que todo mundo sabe sobre.

Este não é todo o kit e kaboodle, mas é alguns dos trechos mais úteis eu recolhi:

(defadvice show-paren-function (after show-matching-paren-offscreen
                                      activate)
  "If the matching paren is offscreen, show the matching line in the                               
echo area. Has no effect if the character before point is not of                                   
the syntax class ')'."
  (interactive)
  (let ((matching-text nil))
    ;; Only call `blink-matching-open' if the character before point                               
    ;; is a close parentheses type character. Otherwise, there's not                               
    ;; really any point, and `blink-matching-open' would just echo                                 
    ;; "Mismatched parentheses", which gets really annoying.                                       
    (if (char-equal (char-syntax (char-before (point))) ?\))
        (setq matching-text (blink-matching-open)))
    (if (not (null matching-text))
        (message matching-text))))

;;;;;;;;;;;;;;;
;; UTF-8
;;;;;;;;;;;;;;;;;;;;
;; set up unicode
(prefer-coding-system       'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
;; This from a japanese individual.  I hope it works.
(setq default-buffer-file-coding-system 'utf-8)
;; From Emacs wiki
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))
;; Wwindows clipboard is UTF-16LE 
(set-clipboard-coding-system 'utf-16le-dos)


(defun jonnay-timestamp ()
  "Spit out the current time"
  (interactive)
  (insert (format-time-string "%Y-%m-%d")))

(defun jonnay-sign ()
  "spit out my name, email and the current time"
  (interactive)
  (insert "-- Jonathan Arkell (jonathana@criticalmass.com)")
  (jonnay-timestamp))


;; Cygwin requires some seriosu setting up to work the way i likes it
(message "Setting up Cygwin...")
(let* ((cygwin-root "c:")
       (cygwin-bin (concat cygwin-root "/bin"))
       (gambit-bin "/usr/local/Gambit-C/4.0b22/bin/")
       (snow-bin "/usr/local/snow/current/bin")
       (mysql-bin "/wamp/bin/mysql/mysql5.0.51a/bin/"))
   (setenv "PATH" (concat cygwin-bin ";" ;
                          snow-bin ";" 
                          gambit-bin ";"
                          mysql-bin ";"
                          ".;")  
           (getenv "PATH"))
   (setq exec-path (cons cygwin-bin exec-path)))

(setq shell-file-name "bash")
(setq explicit-shell-file-name "bash")

(require 'cygwin-mount)
(cygwin-mount-activate)
(message "Setting up Cygwin...Done")


; Completion isn't perfect, but close
(defun my-shell-setup ()
   "For Cygwin bash under Emacs 20+"
   (setq comint-scroll-show-maximum-output 'this)
   (setq comint-completion-addsuffix t)
   (setq comint-eol-on-send t)
   (setq w32-quote-process-args ?\")
   (make-variable-buffer-local 'comint-completion-addsuffix))

(setq shell-mode-hook 'my-shell-setup)
(add-hook 'emacs-startup-hook 'cygwin-shell)


; Change how home key works
(global-set-key [home] 'beginning-or-indentation)
(substitute-key-definition 'beginning-of-line 'beginning-or-indentation global-map)


(defun yank-and-down ()
  "Yank the text and go down a line."
  (interactive)
  (yank)
  (exchange-point-and-mark)
  (next-line))

(defun kill-syntax (&optional arg)
  "Kill ARG sets of syntax characters after point."
  (interactive "p")
  (let ((arg (or arg 1))
    (inc (if (and arg (< arg 0)) 1 -1))
    (opoint (point)))
    (while (not (= arg 0))
      (if (> arg 0)
      (skip-syntax-forward (string (char-syntax (char-after))))
    (skip-syntax-backward (string (char-syntax (char-before)))))
      (setq arg (+ arg inc)))
    (kill-region opoint (point))))

(defun kill-syntax-backward (&optional arg)
  "Kill ARG sets of syntax characters preceding point."
  (interactive "p")
  (kill-syntax (- 0 (or arg 1))))

(global-set-key [(control shift y)] 'yank-and-down)
(global-set-key [(shift backspace)] 'kill-syntax-backward)
(global-set-key [(shift delete)] 'kill-syntax)


(defun insert-file-name (arg filename)
  "Insert name of file FILENAME into buffer after point.
  Set mark after the inserted text.

  Prefixed with \\[universal-argument], expand the file name to
  its fully canocalized path.

  See `expand-file-name'."
  ;; Based on insert-file in Emacs -- ashawley 2008-09-26
  (interactive "*P\nfInsert file name: ")
  (if arg
      (insert (expand-file-name filename))
      (insert filename)))

(defun kill-ring-save-filename ()
  "Copy the current filename to the kill ring"
  (interactive)
  (kill-new (buffer-file-name)))

(defun insert-file-name ()
  "Insert the name of the current file."
  (interactive)
  (insert (buffer-file-name)))

(defun insert-directory-name ()
  "Insert the name of the current directory"
  (interactive)
  (insert (file-name-directory (buffer-file-name))))

(defun jonnay-toggle-debug ()
  "Toggle debugging by toggling icicles, and debug on error"
  (interactive)
  (toggle-debug-on-error)
  (icicle-mode))


(defvar programming-modes
  '(emacs-lisp-mode scheme-mode lisp-mode c-mode c++-mode 
    objc-mode latex-mode plain-tex-mode java-mode
    php-mode css-mode js2-mode nxml-mode nxhtml-mode)
  "List of modes related to programming")

; Text-mate style indenting
(defadvice yank (after indent-region activate)
  (if (member major-mode programming-modes)
      (indent-region (region-beginning) (region-end) nil)))

Eu tenho um monte de outros que já foram mencionados, mas estes são absolutamente necessários na minha opinião:

(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

Você pode olhar aqui: http://www.dotemacs.de/

E meu .emacs é muito tempo para colocá-lo aqui também, por isso vai fazer a resposta não é muito legível. De qualquer forma, se você quiser eu posso enviá-lo para você.

Também eu recomendaria que você leia este: http: // steve. yegge.googlepages.com/my-dot-emacs-file

Aqui estão alguns mapeamentos de teclas que eu me tornei dependente:

(global-set-key [(control \,)] 'goto-line)
(global-set-key [(control \.)] 'call-last-kbd-macro)
(global-set-key [(control tab)] 'indent-region)
(global-set-key [(control j)] 'join-line)
(global-set-key [f1] 'man)
(global-set-key [f2] 'igrep-find)
(global-set-key [f3] 'isearch-forward)
(global-set-key [f4] 'next-error)
(global-set-key [f5] 'gdb)
(global-set-key [f6] 'compile)
(global-set-key [f7] 'recompile)
(global-set-key [f8] 'shell)
(global-set-key [f9] 'find-next-matching-tag)
(global-set-key [f11] 'list-buffers)
(global-set-key [f12] 'shell)

Algumas outras coisas diversas, principalmente para o desenvolvimento de C ++:

;; Use C++ mode for .h files (instead of plain-old C mode)
(setq auto-mode-alist (cons '("\\.h$" . c++-mode) auto-mode-alist))

;; Use python-mode for SCons files
(setq auto-mode-alist (cons '("SConstruct" . python-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("SConscript" . python-mode) auto-mode-alist))

;; Parse CppUnit failure reports in compilation-mode
(require 'compile)
(setq compilation-error-regexp-alist
      (cons '("\\(!!!FAILURES!!!\nTest Results:\nRun:[^\n]*\n\n\n\\)?\\([0-9]+\\)) test: \\([^(]+\\)(F) line: \\([0-9]+\\) \\([^ \n]+\\)" 5 4)
            compilation-error-regexp-alist))

;; Enable cmake-mode from http://www.cmake.org/Wiki/CMake_Emacs_mode_patch_for_comment_formatting
(require 'cmake-mode)
(setq auto-mode-alist
      (append '(("CMakeLists\\.txt\\'" . cmake-mode)
                ("\\.cmake\\'" . cmake-mode))
              auto-mode-alist))

;; "M-x reload-buffer" will revert-buffer without requiring confirmation
(defun reload-buffer ()
  "revert-buffer without confirmation"
  (interactive)
  (revert-buffer t t))

Para atualizar a página que você está editando a partir do 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"))))

Usado em combinação com http://hyperstruct.net/projects/mozlab

Você pode encontrar minha configuração (ambos em html e em tar'ed de arquivo) em minha local . Ele contém grande quantidade de configurações para diferentes modos

Este bloco é o mais importante para mim:

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

Eu nunca fui clara sobre a diferença entre aqueles, no entanto. culto da carga, eu acho ...

Eu tento manter meu .emacs organizados. A configuração será sempre um trabalho em progresso, mas eu estou começando a ficar satisfeito com a estrutura geral.

Todo o material está sob ~/.elisp, um diretório que está sob controle de versão (eu uso git, se isso for de interesse). ~/.emacs simplesmente aponta para ~/.elisp/dotemacs que se apenas cargas ~/.elisp/cfg/init. Esse arquivo em importações, por sua vez vários arquivos de configuração via require. Isto significa que os arquivos de configuração precisa se comportar como modos: eles importar coisas que eles dependem e eles próprios provide no final do arquivo, por exemplo, (provide 'my-ibuffer-cfg). I prefixar todos os identificadores que são definidos na minha configuração com my-.

I organizar a configuração em relação a modos / disciplinas / tarefas, não por suas implicações técnicas, por exemplo, I não tem um arquivo de configuração separado em que todas keybindings ou faces são definidos.

Meu init.el define o seguinte gancho para se certificar de que Emacs recompila arquivos de configuração sempre que salva (cargas Elisp compilados muito mais rápido, mas eu não quero fazer este passo manualmente):

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

Esta é a estrutura de diretório para ~/.elisp:

~/.elisp/todo.org: file Org-mode em que eu manter o controle de coisas que ainda precisa ser feito (+ itens da lista de desejo)

.

~/.elisp/dotemacs:. Alvo Symlink para ~/.emacs, cargas ~/.elisp/cfg/init

~/.elisp/cfg:. Meus próprios arquivos de configuração

~/.elisp/modes:. Modos que consistem apenas de um único arquivo

~/.elisp/packages:. Modos sofisticados com lisp, documentação e provavelmente arquivos de recursos

Eu uso GNU Emacs, essa versão não tem suporte real para os pacotes. Portanto, eu organizá-los manualmente, geralmente assim: ~/.elisp/packages/foobar-0.1.3 é o diretório raiz para o pacote. lisp subdiretório contém todos os arquivos do Lisp e info é onde a documentação vai. ~/.elisp/packages/foobar é um link simbólico que aponta para a versão actualmente utilizada do pacote de modo que eu não preciso mudar meus arquivos de configuração quando eu atualizar alguma coisa. Para alguns pacotes que eu manter um torno arquivo ~/.elisp/packages/foobar.installation em que eu manter notas sobre o processo de instalação. Por motivos de desempenho eu compilar todos os arquivos elisp em pacotes recém-instalados, no caso de não ser o caso por padrão.

Aqui está um par de minhas próprias coisas:

data Insere no formato ISO 8601:

(defun insertdate ()
  (interactive)
  (insert (format-time-string "%Y-%m-%d")))

(global-set-key [(f5)] 'insertdate)

Para programadores C ++, cria um esqueleto de classe (nome da classe será o mesmo que o nome do arquivo sem extensão):

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

Criar automaticamente fechar parênteses:

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

i usar paredit para fácil (e) manuseio Lisp e de modo ido conclusões minibuffer.

É difícil responder a esta pergunta, porque todo mundo usa Emacs para fins muito diferentes.

Ainda mais, uma melhor prática pode ser para beijar seu dotemacs. Desde o Fácil Personalização da interface é amplamente apoiada entre modos de Emacs', você deve armazenar toda sua personalização em sua custom-file (que pode ser um lugar separado em seus dotemacs), e para o dotemacs , colocar em apenas carregar configurações de caminho, pacote requer, ganchos e atalhos de teclado. Uma vez que você começar a usar Emacs Starter Kit , um todo útil monte de configurações podem removido de seus dotemacs também.

DotEmacs categoria See de EmacsWiki. Ele fornece muitos links para páginas que abordam esta questão.

(put 'erase-buffer 'disabled nil)
(put 'downcase-region 'disabled nil)
(set-variable 'visible-bell t)
(set-variable 'tool-bar-mode nil)
(set-variable 'menu-bar-mode nil)

(setq load-path (cons (expand-file-name "/usr/share/doc/git-core/contrib/emacs") load-path))
 (require 'vc-git)
 (when (featurep 'vc-git) (add-to-list 'vc-handled-backends 'git))
 (require 'git)
 (autoload 'git-blame-mode "git-blame"
           "Minor mode for incremental blame for Git." t)

Eu configurar alguns atalhos úteis para páginas da web e pesquisas usando 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))

Blog post sobre como isso funciona aqui

http: //justinsboringpage.blogspot .com / 2009/02 / search-reddit-flickr-and-google-from.html

Além disso, eu recomendo estes:

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

Também me livrar de algumas das coisas gui supérfluo

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

Uma linha de alteração do caminho de carga Uma linha para carregar minha biblioteca de inicialização Uma linha para carregar meus emacs o init arquivos

É claro, os "emacs o init arquivos" são bastante numerosos, um por coisa específica, carregado em uma ordem determinística.

emacs-starter-kit como base, então eu 've adicionado .. vimpulse.el, whitespace.el, yasnippet, textmate.el e newsticker.el.

No arquivo meu ~ / .emacs.d / $ USERNAME.el (dbr.el):

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

Depois de ler isto, eu imaginei que seria bom ter um site simples apenas para os melhores modificações .emacs. Sinta-se livre para postar e votar neles aqui:

http://dotemacs.slinkset.com/

Eu sou novo para emacs, no meu arquivo .emacs existem

  • recuo de configuração
  • tema de cor
  • Modo php, modo de café e modo de JS2
  • Modo ido

Para Scala codificadores

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

Meu emacs configuração tem crescido muito grande ao longo dos anos e eu tenho muito material útil para mim lá, mas se eu tiver duas funções que provavelmente teria sido aqueles.

Definir C-x UP e C-x para baixo para mover a linha atual ou para baixo mantendo o cursor no lugar certo:

;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)
    )
  )
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top