2013-09-22 37 views
7

我是emacs的新手,它的縮進讓我開心。它爲自己的好處太聰明瞭;它(錯誤地)認爲它知道我想如何格式化我的源代碼,但是我沒有時間去追逐每一種我編寫代碼的不同語言的每種模式;並且許多這些語言根本沒有啓用任何模式。如何在所有模式下在emacs中獲得自動縮進(不是智能縮進)

這裏的行爲,我想:

  • TAB插入縮進
  • RET插入新行,然後拷貝從上一行開始的空白字符的第一個非空白字符,或行尾,以較早者爲準
  • DEL(退格鍵)在行起始和第一個非空白字符之間的空白文本/行尾結尾刪除一個縮進如果可能,否則單個字符像正常
  • 上{
  • 沒有自動取消縮進上}
  • 事實上,沒有聰明的笨蛋縮進行爲隨時隨地,只需前行的縮進上RET複製沒有自動縮進。
  • 要對每個源文件格式配置兩個變量:顯示選項卡寬度,以及的內容縮進。最好這些可以配置爲隨機源代碼格式,而不必爲它們編寫主要模式,除非寫入主要模式是包含兩個setq的.emacs中的一行。

這會讓我在所有語言中都符合邏輯和一致的行爲。這將把代碼格式化的工作留給我,但沒關係,我已經這樣做了20年,並且我知道如何製作其他宏,以使其更有效率。更重要的是,它使我擺脫了無窮無盡的配置設置,試圖讓自動行爲適合我的偏好。而且我的宏可以依賴一致的行爲,所以它們可以在所有模式下正常工作。

以上可能嗎?其他人確實有過這樣做嗎?那裏有一些小模式嗎?

+1

如果你不喜歡擺弄那麼Emacs是不適合你:)。 但嚴重的是,讓您的問題更具信息性:添加不起作用的模式。 我對Emacs至少使用了15種不同的編程模式,它們大多數都很棒。 或者,如果您想放棄所有模式並堅持基本模式,請概述基本模式的 特定功能,這些功能不適用於您。 –

+0

@ abo-abo我不想丟失語法突出顯示或插入諸如自動完成之類的東西。但是在過去的兩個週末,我花了超過15個小時試圖將emacs打成合理的形狀,並且它仍然不適合在基本模式下編輯C和大括號分隔的語言。 –

+0

完成例程也是標籤例程令人沮喪。我反彈TAB自插入命令和反彈C-(C-)縮進tab命令,並設置tab-always-indent完成,所以我可以得到例如.emacs中的elisp完成,但這也意味着C- 嘗試自動格式化。將完成和代碼格式綁定到同一個函數的想法是什麼? –

回答

6

下面的代碼:

(setq tab-width 4) 
(defun plain-tab() 
    (interactive) 
    (insert (make-string tab-width ?\))) 
(defun plain-ret() 
    (interactive) 
    (looking-back "^\\(+\\).*") 
    (newline) 
    (insert (match-string 1))) 
(defun plain-del() 
    (interactive) 
    (backward-delete-char 
    (if (looking-back (format " \\{%d\\}" tab-width)) tab-width 1))) 
(defvar all-the-mode-maps 
    '(c-mode-map c++-mode-map java-mode-map 
    js-mode-map emacs-lisp-mode-map 
    clojure-mode-map)) 
(require 'cc-mode) 
(require 'js) 
(require 'clojure-mode) 
(eval `(mapc 
     (lambda(map) 
      (define-key map [tab] 'plain-tab) 
      (define-key map [return] 'plain-ret) 
      (define-key map [backspace] 'plain-del) 
      (define-key map "{" (lambda()(interactive)(insert "{"))) 
      (define-key map "}" (lambda()(interactive)(insert "}")))) 
     (list ,@all-the-mode-maps))) 
+0

+1讓我知道很多有用的表單。我將把大部分內容融入到我的小調模式中,例如有些文件使用製表符而不是空格;我將使用鉤子,而不是要求影響其他模式,因爲emacs不會立即啓動;它需要影響bash,Haskell,OCaml,Ruby,Python,Go,JS,css,html,xml,xsd,scss,coffeescript,elisp,C#,yaml,erb,puppet,yacc,lex,awk,lua和makefiles,作爲我在過去一個月編輯過的不完整的文件類型,不包括具有自定義分析器的文件格式。 –

+0

我根本沒有辦法找到所有這些格式的主要模式並正確配置它們。 –

+0

我想你必須編寫一個小模式來記錄你使用的所有模式:) –