Подтвердить что ты не робот

Что в ваших .emacs?

Недавно я переключил компьютеры, и где-то по пути я потерял свои .emacs. Я пытаюсь создать его снова, но пока я нахожусь в этом, я думал, что возьму другие хорошие конфигурации, которые используют другие люди.

Итак, если вы используете Emacs, что в ваших.emacs?

Моя сейчас довольно бесплодная, содержащая только:

  • Глобальный режим блокировки шрифтов! (global-font-lock-mode 1)
  • Мои личные предпочтения относительно отступов, вкладок и пробелов.
  • Используйте режим cperl вместо perl-mode.
  • Ярлык для компиляции.

Как вы думаете, что полезно?

4b9b3361

Ответ 2

Мой любимый фрагмент. Конечная в ледяной конфете 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)

Итак, вы видите, что при редактировании lisp/scheme:

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

Ответ 3

Мне нужно изменить приглашение yes или no на приглашения y или n:

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

У меня есть, чтобы запустить Emacs без такой "фанфары", которую я получил от этого вопроса.

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

И функция Steve Yegge для переименования файла, который вы редактируете вместе со своим соответствующим буфером:

(defun rename-file-and-buffer (new-name)
  "Renames both current buffer and file it 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))))))

Ответ 4

Одна вещь, которая может оказаться очень полезной: прежде чем она станет слишком большой, попробуйте разбить ее на несколько файлов для различных задач: мой .emacs просто устанавливает мой путь загрузки и загружает кучу файлов - у меня есть все мои настройки в режиме mode-configs.el, привязки клавиш в keys.el и т.д.

Ответ 5

Мои .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

Это устанавливает уникальность, которая изменяет эти неправильные имена файлов < 2 > и т.д., которые вы получаете, когда несколько файлов имеют одно и то же имя в гораздо более аккуратное однозначное имя, используя как можно больше всего пути к файлу, как это необходимо.

Что об этом... остальное - довольно стандартное вещество, которое, я уверен, все знают о.

Ответ 6

Это не весь комплект и kaboodle, но это некоторые из более полезных фрагментов, которые я собрал:

(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 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 ([email protected])")
  (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)))

Ответ 7

У меня есть много других, о которых уже упоминалось, но это абсолютно необходимо, на мой взгляд:

(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

Ответ 8

Вы можете посмотреть здесь: http://www.dotemacs.de/

И мои .emacs довольно долго, чтобы поместить его здесь, так что это сделает ответ слишком читаемым. В любом случае, если вы хотите, я могу отправить его вам.

Также я бы рекомендовал вам прочитать следующее: http://steve.yegge.googlepages.com/my-dot-emacs-file

Ответ 9

Вот некоторые ключевые сопоставления, от которых я стал зависимым:

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

Некоторые другие разные вещи, в основном для разработки на С++:

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

Ответ 10

Чтобы обновить веб-страницу, которую вы редактируете, из 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"))))

Используется в комбинации с http://hyperstruct.net/projects/mozlab

Ответ 11

Вы можете найти мою конфигурацию (как в html, так и в tar'ed архиве) на мой сайт. Он содержит множество настроек для разных режимов.

Ответ 12

Этот блок является самым важным для меня:

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

Я никогда не понимал разницы между ними. Культовый культ, я думаю...

Ответ 13

Я стараюсь, чтобы мои .emacs были организованы. Конфигурация всегда будет выполняться, но я начинаю удовлетворять общей структуре.

Все содержимое находится под ~/.elisp, каталогом, находящимся под управлением версии (я использую git, если это интересно). ~/.emacs просто указывает на ~/.elisp/dotemacs, который сам просто загружает ~/.elisp/cfg/init. Этот файл, в свою очередь, импортирует различные файлы конфигурации через require. Это означает, что файлы конфигурации должны вести себя как режимы: они импортируют материал, на который они зависят, и они provide сами в конце файла, например. (provide 'my-ibuffer-cfg). Я префикс всех идентификаторов, определенных в моей конфигурации, с помощью my-.

Я организую конфигурацию в отношении режимов/предметов/задач, а не их технических последствий, например. У меня нет отдельного файла конфигурации, в котором определены все привязки или грани.

My init.el определяет следующий крючок, чтобы убедиться, что Emacs перекомпилирует файлы конфигурации при сохранении (скомпилированный Elisp загружается намного быстрее, но я не хочу делать этот шаг вручную):

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

Это структура каталогов для ~/.elisp:

~/.elisp/todo.org: файл режима Org, в котором я отслеживаю материал, который все еще нужно сделать (+ элементы списка пожеланий).

~/.elisp/dotemacs: цель Symlink для ~/.emacs, загружает ~/.elisp/cfg/init.

~/.elisp/cfg: Мои собственные файлы конфигурации.

~/.elisp/modes: Режимы, состоящие только из одного файла.

~/.elisp/packages: Сложные режимы с lisp, документацией и, возможно, файлами ресурсов.

Я использую GNU Emacs, у этой версии нет реальной поддержки пакетов. Поэтому я организую их вручную, обычно так: ~/.elisp/packages/foobar-0.1.3 является корневым каталогом для пакета. Подкаталог lisp содержит все файлы lisp и info, где идет документация. ~/.elisp/packages/foobar - это символическая ссылка, которая указывает на используемую в данный момент версию пакета, поэтому мне не нужно менять файлы конфигурации, когда я что-то обновляю. Для некоторых пакетов я сохраняю файл ~/.elisp/packages/foobar.installation, в котором храню заметки о процессе установки. По соображениям производительности я компилирую все файлы elisp во вновь установленных пакетах, если это не так по умолчанию.

Ответ 14

Вот несколько моих собственных вещей:

Вставляет дату в формате ISO 8601:

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

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

Для программистов на C++ создается скелет класса (имя класса будет таким же, как имя файла без расширения):

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

Ответ 15

Я использую paredit для упрощения (e) lisp обработки и завершения работы мини-буфера ido-mode.

Ответ 16

Трудно ответить на этот вопрос, потому что каждый использует Emacs для самых разных целей.

Кроме того, лучше использовать KISS для ваших дотмаков. Поскольку Easy Customization Interface широко поддерживается среди режимов Emacs, вы должны сохранить все свои настройки в своем custom-file (который может быть отдельным место в ваших тотемаках), а для dotemacs вставьте в него только параметры пути загрузки, требуемые пакеты, перехваты и привязки клавиш. После того, как вы начнете использовать Emacs Starter Kit, также может быть удалена целая полезная группа настроек из ваших дотэмаков.

Ответ 17

См. EmacsWiki DotEmacs. Он предоставляет множество ссылок на страницы, посвященные этому вопросу.

Ответ 18

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

Ответ 19

Я установил некоторые удобные ярлыки на веб-страницы и поиски с помощью 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))

Сообщение в блоге о том, как это работает здесь

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

Также я рекомендую:

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

Ответ 20

Одна строка для изменения пути загрузки Одна строка для загрузки моей библиотеки init Одна строка для загрузки файлов инициализации emacs

Конечно, "файлы инициализации emacs" довольно многочисленны, по одному на конкретную вещь, загруженные в детерминированном порядке.

Ответ 21

emacs-starter-kit в качестве базы, затем я добавил... vimpulse.el, whitespace.el, yasnippet, textmate.el и newsticker.el.

В моем файле ~/.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)

Ответ 23

Прочитав это, я решил, что было бы неплохо иметь простой сайт только для лучших модификаций .emacs. Не стесняйтесь публиковать и голосовать на них здесь:

http://dotemacs.slinkset.com/

Ответ 24

Для Scala кодеры

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

Ответ 26

Я новичок в emacs, в моем файле .emacs есть

  • Конфигурация отступа
  • цветная тема
  • режим php, режим кофе и режим js2
  • режим ido

Ответ 29

Моя конфигурация emacs выросла довольно много лет, и у меня много полезных вещей для меня, но если у меня есть две функции, возможно, это были бы те.

Определите C-x UP и C-x DOWN, чтобы переместить текущую строку или вниз, удерживая курсор в нужном месте:

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