То, что у тебя есть.в Emacs?
в последнее время я несколько раз менял компьютеры, и где-то по пути я потерял свой .в Emacs. Я пытаюсь построить его снова, но пока я на нем, я думал, что возьму другие хорошие конфигурации, которые используют другие люди.
Итак, если вы используете Emacs, что в код .в Emacs?
мой довольно бесплоден прямо сейчас, содержащий только:
- глобальный шрифт-режим блокировки!
(global-font-lock-mode 1)
- мои личные предпочтения в отношении отступы, табуляцию и пробелы.
- используйте cperl-режим вместо perl-режима.
- ярлык для компиляции.
что вы считаете полезным?
29 ответов:
использовать окончательный сайт dotfiles. Добавьте свой '.в Emacs' здесь. Читайте'.emacs ' других.
мой любимый фрагмент. Конечная в 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)))
Я должен это изменить
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)и Стив Yegge это функция переименования файла, который вы редактируете вместе с соответствующим буфером:
(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))))))
одна вещь, которая может оказаться очень полезной: прежде чем она станет слишком большой, попробуйте разделить ее на несколько файлов для различных задач: My .emacs просто устанавливает мой путь загрузки и загружает кучу файлов - у меня есть все мои настройки режима в
mode-configs.elпривязки вkeys.elи т. д.
мой .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, который меняет эти файловые некрасиво и т. д. имена буферов вы получаете, когда несколько файлов имеют одно и то же имя в гораздо более аккуратное однозначное имя, используя столько всего пути файла, сколько он должен.
вот и все... этот отдых-это довольно стандартный материал, о котором я уверен, что все знают.
Это не весь набор и 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'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 ([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)))
У меня есть много других, которые уже упоминались, но они абсолютно необходимы на мой взгляд:
(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
вы можете посмотреть здесь: http://www.dotemacs.de/
и мой .Emacs-это довольно долго, чтобы поставить его здесь, так что он будет делать в ответ не слишком читабельным. В любом случае, если вы хотите, я могу отправить его вам.
также я бы рекомендовал вам прочитать это:http://steve.yegge.googlepages.com/my-dot-emacs-file
вот некоторые ключевые сопоставления, от которых я стал зависеть:
(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)некоторые другие разные вещи, в основном для разработки на 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))
чтобы обновить веб-страницу, которую вы редактируете из 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
вы можете найти мою конфигурацию (как в html, так и в архиве tar'ED) на мой сайт. Он содержит множество настроек для различных режимов
этот блок для меня самый важный:
(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 организовали. Конфигурация всегда будет в процессе работы, но я начинаю быть удовлетворенным общей структурой.
все вещи под
~/.elisp, каталог, который находится под управлением версии (я использую git, если это интересно).~/.emacsуказывает~/.elisp/dotemacsкоторый сам просто загружает~/.elisp/cfg/init. Этот файл в свою очередь импортирует различные файлы конфигурации черезrequire. Это означает, что файлы конфигурации должны вести себя как режимы: они импортируют вещи, от которых зависят, и ониprovideсами в конце файла, например,(provide 'my-ibuffer-cfg). Я префикс всех идентификаторов, которые определены в моей конфигурации сmy-.я организовываю конфигурацию в отношении режимов / предметов / задач, а не их технических последствий, например I не есть отдельный конфигурационный файл, в котором все привязки клавиш или грани определены.
мой
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-mode файл, в котором я отслеживаю вещи, которые еще нужно сделать (+ элементы списка пожеланий).
~/.elisp/dotemacs: цель символической ссылки для~/.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 в недавно установленных пакетах, если это не так по умолчанию.
вот пара моих собственных материалов:
вставляет дату в формате 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)
трудно ответить на этот вопрос, потому что каждый использует Emacs для очень разных целей.
более того, лучшей практикой может быть поцелуй ваших dotemacs. Так как Простой Интерфейс Настройки широко поддерживается среди режимов в Emacs, вы должны хранить все ваши настройки в
custom-file(который может быть отдельным местом в ваших dotemacs), и для dotemacs, поместите в него только настройки пути загрузки, пакет требует, крючки и ключ фурнитура. Как только вы начнете использовать Стартовый Комплект Emacs, целая полезная куча настроек также может быть удалена из ваших dotemacs.
смотрите EmacsWiki DotEmacs
(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)
Я установил некоторые удобные ярлыки для веб-страниц и поиска с помощью 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)))
одна строка для изменения пути загрузки Одна строка для загрузки моей библиотеки init Одна строка для загрузки моих файлов Emacs init
конечно, "Emacs init files" довольно многочисленны, по одному на конкретную вещь, загруженную в детерминированном порядке.
emacs-starter-kit в качестве базы, то я добавил..
vimpulse.el,whitespace.el,yasnippet,textmate.elиnewsticker.el.в моем ~/.в Emacs.D / $имя пользователя.el (dbr.el) file:
(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)
всегда сохраняйте мою конфигурацию в svn http://my-trac.assembla.com/ez-conf/browser/emacs.d
прочитав это, я подумал, что было бы хорошо иметь простой сайт только для лучших .модификации emacs. Не стесняйтесь размещать и голосовать на них здесь:
Я новичок в emacs, в моем .файл emacs есть
- настройки отступа
- цветовая тема
- режим php, режим кофе и режим js2
- режим ido
много вещей:https://github.com/tavisrudd/emacs.d
el-get сделал управление им и зависимостями намного проще:https://github.com/tavisrudd/emacs.d/blob/master/dss-init-el-get.el
на 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)
моя конфигурация emacs выросла довольно большой за эти годы, и у меня есть много полезных вещей для меня там, но если у меня есть две функции, это, вероятно, были бы те.
определите C-x вверх и C-x вниз, чтобы переместить текущую строку или вниз, удерживая курсор в нужном месте :
;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) ) )
Comments