आपके.emacs में क्या है?




text-editor elisp (20)

EmacsWiki की DotEmacs श्रेणी देखें। यह इस प्रश्न को संबोधित करने वाले पृष्ठों के बहुत सारे लिंक प्रदान करता है।

मैंने कंप्यूटर को हाल ही में कुछ बार स्विच किया है, और जिस तरह से मैंने अपना .emacs खो दिया है। मैं इसे फिर से बनाने की कोशिश कर रहा हूं, लेकिन जब मैं इसमें हूं, मैंने सोचा कि मैं अन्य अच्छी कॉन्फ़िगरेशन उठाऊंगा जो अन्य लोग उपयोग करते हैं।

तो, यदि आप Emacs का उपयोग करते हैं, तो आपके .emacs में क्या है?

मेरा अभी बहुत सुंदर है, जिसमें केवल युक्त है:

  1. वैश्विक फ़ॉन्ट-लॉक-मोड! (global-font-lock-mode 1)
  2. इंडेंटेशन, टैब और रिक्त स्थान के संबंध में मेरी व्यक्तिगत प्राथमिकताएं।
  3. पर्ल मोड के बजाय cperl-mode का प्रयोग करें।
  4. संकलन के लिए एक शॉर्टकट।

आपको क्या लगता है उपयोगी है?


आप मेरी साइट पर मेरी कॉन्फ़िगरेशन (एचटीएमएल और टैरड आर्काइव दोनों में) पा सकते हैं। इसमें विभिन्न तरीकों के लिए बहुत सी सेटिंग्स शामिल हैं


इस सवाल का जवाब देना मुश्किल है, क्योंकि हर कोई Emacs का उपयोग बहुत अलग उद्देश्यों के लिए करता है।

इसके अलावा, आपके डॉटमैक्स केआईएसएस को बेहतर अभ्यास हो सकता है। चूंकि आसान अनुकूलन इंटरफ़ेस को Emacs के मोड में व्यापक रूप से समर्थित किया गया है, इसलिए आपको अपनी सभी अनुकूलन को अपनी custom-file में संग्रहीत करना चाहिए (जो आपके डॉटमैक्स में एक अलग स्थान हो सकता है), और dotemacs , इसमें केवल पथ सेटिंग्स, पैकेज लोड करें आवश्यकता है, हुक, और कुंजी बाइंडिंग। एक बार जब आप Emacs स्टार्टर किट का उपयोग करना शुरू कर देते हैं, तो आपके डॉटमैक्स से सेटिंग्स का एक संपूर्ण उपयोगी समूह भी हटा दिया जा सकता है।


इसे पढ़ने के बाद, मुझे लगा कि यह सबसे अच्छा साइटमैक्स संशोधनों के लिए एक साधारण साइट होना अच्छा होगा। यहां पोस्ट करने और उन्हें वोट देने के लिए स्वतंत्र महसूस करें:

http://dotemacs.slinkset.com/


एक चीज जो बहुत उपयोगी साबित हो सकती है: इससे पहले कि यह बहुत बड़ा हो जाए, इसे विभिन्न कार्यों के लिए कई फाइलों में विभाजित करने का प्रयास करें: मेरा .emacs बस मेरा लोड-पथ सेट करता है और लोड फ़ाइलों का एक गुच्छा लोड करता है - मुझे अपना पूरा मोड मिला है- mode-configs.el में विशिष्ट सेटिंग्स, keys.el में keys.el , et cetera



भार पथ में संशोधन करने के लिए एक पंक्ति मेरी init लाइब्रेरी को लोड करने के लिए एक पंक्ति मेरी emacs init फ़ाइलों को लोड करने के लिए एक पंक्ति

बेशक, "emacs init files" काफी असंख्य हैं, प्रति विशिष्ट चीज़, एक निर्धारक क्रम में लोड की गई है।


मेरा .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> इत्यादि बफर नाम जो आपको प्राप्त होते हैं जब एकाधिक फ़ाइलों का एक ही नाम एक बहुत ही न्यूरर स्पष्ट नाम में होता है, जैसा कि फ़ाइल के पूरे पथ के रूप में होता है।

यह इसके बारे में है ... बाकी सुंदर मानक सामान है जो मुझे यकीन है कि हर कोई जानता है।


मेरे emacs विन्यास पिछले कुछ वर्षों में काफी बड़ा हो गया है और मेरे पास मेरे लिए बहुत उपयोगी चीजें हैं लेकिन अगर मेरे पास दो कार्य हैं तो शायद वे लोग होंगे।

कर्सर को सही जगह पर रखने के लिए वर्तमान लाइन या नीचे स्थानांतरित करने के लिए सीएक्स यूपी और सीएक्स नीचे परिभाषित करें:

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

मेरे पास y या n संकेतों के लिए yes या no संकेत बदलने के लिए no :

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

मेरे पास इमाक्स को इतने सारे "प्रशंसक" के बिना शुरू करने के लिए है जो मुझे इस प्रश्न से मिला है।

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

और स्टीव येगेज का फ़ंक्शन उस फ़ाइल का नाम बदलने के लिए जिसे आप इसके संबंधित बफर के साथ संपादित कर रहे हैं:

(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 के लिए नया हूँ, मेरी .emacs फ़ाइल में वहाँ हैं

  • इंडेंटेशन कॉन्फ़िगरेशन
  • रंग विषय
  • PHP मोड, कॉफी मोड और जेएस 2 मोड
  • ido मोड

मैं अपने .emacs व्यवस्थित रखने की कोशिश करता हूँ। विन्यास हमेशा प्रगति पर एक काम होगा, लेकिन मैं समग्र संरचना से संतुष्ट होना शुरू कर रहा हूं।

सभी सामान ~/.elisp अंतर्गत है, एक निर्देशिका जो संस्करण नियंत्रण में है (मैं गिट का उपयोग करता हूं, अगर वह ब्याज है)। ~/.emacs बस ~/.elisp/dotemacs करता है जो स्वयं ही ~/.elisp/cfg/init लोड करता है। वह फ़ाइल बदले में विभिन्न कॉन्फ़िगरेशन फ़ाइलों को आयात के माध्यम से आयात करती require । इसका अर्थ यह है कि कॉन्फ़िगरेशन फ़ाइलों को मोड की तरह व्यवहार करने की आवश्यकता होती है: वे उन चीज़ों को आयात provide हैं जिन पर वे निर्भर provide हैं और वे फ़ाइल के अंत में स्वयं को provide हैं, उदाहरण के लिए (provide 'my-ibuffer-cfg) । मैं उन सभी पहचानकर्ताओं को उपसर्ग करता हूं जो मेरे विन्यास में परिभाषित हैं-।

मैं मोड / विषयों / कार्यों के संबंध में कॉन्फ़िगरेशन व्यवस्थित करता हूं, न कि उनके तकनीकी प्रभावों से, उदाहरण के लिए मेरे पास एक अलग कॉन्फ़िगरेशन फ़ाइल नहीं है जिसमें सभी कीबाइंडिंग या चेहरे परिभाषित किए जाते हैं।

मेरा init.el यह सुनिश्चित करने के लिए निम्न हुक को परिभाषित करता है कि जब भी सहेजे गए init.el कॉन्फ़िगरेशन फ़ाइलों को पुन: संकलित करते हैं (संकलित एलिसप बहुत तेज़ लोड करता है लेकिन मैं मैन्युअल रूप से यह चरण नहीं करना चाहता):

;; 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 : ऑर्ग-मोड फ़ाइल जिसमें मैं सामानों का ट्रैक रखता हूं जिन्हें अभी भी करने की आवश्यकता है (+ इच्छा सूची आइटम)।

~/.elisp/dotemacs : ~/.elisp/dotemacs लिए सिम्लिंक लक्ष्य, लोड ~/.elisp/cfg/init

~/.elisp/cfg : मेरी अपनी विन्यास फाइलें।

~/.elisp/modes : मोड्स जिनमें केवल एक फ़ाइल होती है।

~/.elisp/packages : lisp, प्रलेखन और शायद संसाधन फ़ाइलों के साथ परिष्कृत मोड।

मैं जीएनयू एमएक्स का उपयोग करता हूं, उस संस्करण में पैकेज के लिए वास्तविक समर्थन नहीं है। इसलिए मैं उन्हें मैन्युअल रूप से व्यवस्थित करता हूं, आमतौर पर इस तरह: ~/.elisp/packages/foobar-0.1.3 पैकेज के लिए मूल निर्देशिका है। उपनिर्देशिका lisp सभी lisp फ़ाइलों और info है जहां दस्तावेज चला जाता है। ~/.elisp/packages/foobar एक ~/.elisp/packages/foobar है जो पैकेज के वर्तमान में उपयोग किए गए संस्करण को इंगित करता है ताकि जब मैं कुछ अपडेट करता हूं तो मुझे अपनी कॉन्फ़िगरेशन फ़ाइलों को बदलने की आवश्यकता नहीं होती है। कुछ पैकेजों के लिए मैं एक ~/.elisp/packages/foobar.installation फ़ाइल रखता हूं जिसमें मैं स्थापना प्रक्रिया के बारे में नोट्स रखता हूं। प्रदर्शन कारणों से मैं नए स्थापित पैकेजों में सभी elisp फ़ाइलों को संकलित करता हूं, क्या यह डिफ़ॉल्ट रूप से मामला नहीं होना चाहिए।


मैंने वेब पेजों और वेबजंप का उपयोग करके खोजों के लिए कुछ आसान शॉर्टकट सेट किए हैं

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

इसके अलावा मैं कुछ अनावश्यक गुई सामान से छुटकारा पाता हूं

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

यह पूरी किट और कबाबू नहीं है, लेकिन यह कुछ और उपयोगी स्निपेट है जो मैंने एकत्र किए हैं:

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

यहां कुछ महत्वपूर्ण मैपिंग हैं जिन पर मैं निर्भर हूं:

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

यहां मेरी कुछ चीज़ें दी गई हैं:

आईएसओ 8601 प्रारूप में सम्मिलित तारीख:

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


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)


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




dot-emacs