簡體   English   中英

Emacs縮進功能

[英]Emacs Indentation Function

我在Emacs中以cc-mode工作,我發現縮進非常煩人。

作為一個VIM用戶,我幾乎習慣了更長的縮進,以及盡可能多地按Tab鍵選項卡。

在Emacs中,我的TAB映射到goto-line 首先,哪個函數設計用於縮進當前行(或者點之后的內容)? indent-region很煩人,因為你需要突出顯示該區域。

第二,修復縮進的最佳方法是什么?

謝謝,

你可以看到Mx describe-variable RET c-indentation-style當前使用了哪種Tab鍵(但是正如文檔所述,不要直接設置這個變量,而是使用Mx c-set-style )。

變量c-basic-offset是控制cc-mode的tab鍵的,它的默認值是set-from-style ,這意味着tabing將繼承自你用Mx set-c-style ,它將讓您可以從一組內置樣式中選擇 (見下文),也可以創建自己的樣式 您可以看到如何使用Mx describe-variable RET c-style-alist定義Mx describe-variable RET c-style-alist ,然后您可以使用其中一個作為Mx c-add-style的模板。

  • gnu - 自由軟件基金會為GNU程序中的C代碼祝福的編碼風格。
  • k&r - C代碼的經典Kernighan和Ritchie風格。
  • bsd - 在Eric Allman之后也被稱為“Allman風格”。
  • whitesmith - 通過Whitesmiths C附帶的例子推廣,這是一個早期的商業C編譯器。
  • stroustrup - C ++代碼的經典Stroustrup風格。
  • ellemtel - 由“C ++編程,規則和建議”定義的流行C ++編碼標准,Erik Nyquist和Mats Henricson,Ellemtel ^ 1。
  • linux - Linux(內核)的C編碼標准。
  • python - Python擴展模塊的編碼標准^ 2。
  • java - 編輯Java代碼的樣式。 請注意,當您輸入java-mode時,c-default-style的默認值將安裝此樣式。
  • awk - 編輯AWK代碼的樣式。 請注意,當您輸入awk-mode時,c-default-style的默認值將安裝此樣式。
  • user - 這是您創建的特殊樣式。 它由所有樣式變量的出廠默認值組成,這些變量由您使用Customization界面進行的自定義修改,或者通過在.emacs文件的頂層編寫setqs和c-set-offsets來修改(請參閱Config Basics)。 樣式系統在初始化時創建此樣式,之后不會對其進行修改。

更新:

其他人建議使用tab鍵插入\\t制表符,但請不要強制插入制表符! 正如StackOverflow的創建者之一所說的那樣, “只有白痴會使用標簽來格式化他們的代碼” 現在這有點苛刻,但值得注意的是,即便是兩個最大的競爭對手谷歌微軟也同意這一點(即使他們默認建議使用不同數量的空間)。

谷歌說

僅使用空格,並一次縮進2個空格。

微軟說

不應在代碼中使用制表符(\\ 0x09)。 所有縮進都應該用4個空格字符完成。

此外,emacswiki有一個關於Tabs is Evil的部分。

所以,出去解決吧!

答案是: (setq-default c-basic-offset <value>)

我也喜歡emacs,但無法忍受它為我管理標簽的嘗試。 所以我在.emacs使用以下內容:

(global-set-key "\r" 'newline-and-indent)
(global-set-key "\C-m" 'newline-and-indent)
(global-set-key "\C-j" 'newline)

(defalias 'backward-delete-char-untabify 'backward-delete-char)
(defun indent-according-to-mode () (interactive)
  (save-excursion
    (goto-char (- (line-beginning-position) 1))
    (search-backward-regexp "^[         ]*")
  )
  (if (eq (point) (line-beginning-position))
    (insert (match-string 0))
    (save-excursion
      (goto-char (line-beginning-position))
      (insert (match-string 0))
    )
  )
)

(defun newline-and-indent () (interactive) (newline) (indent-according-to-mode))
(defun lisp-indent-line () (interactive) (insert "      "))
; Is there a way to fix this without a hook?
(defun my-c-hook ()
  (setq c-electric-flag nil)
  (defun c-indent-command (n) (interactive "*") (insert "       ")))
(add-hook 'c-mode-common-hook 'my-c-hook)
(defun my-perl-hook ()
  (defun perl-electric-terminator () (interactive "*") (self-insert-command 1))
  (defun perl-indent-command () (interactive "*") (insert "     ")))
(add-hook 'perl-mode-hook 'my-perl-hook)
(defun indent-for-tab-command () (interactive "*") (insert "    "))

結果行為:tab鍵純粹是要插入的制表符,按enter鍵將當前行的確切前導空格(空格或制表符)復制到新行,並禁用這些模式中的所有特殊縮進行為。 如果您使用其他語言,則可能必須擴展/調整上述內容以為它們添加掛鈎。

注意:在上面,引號中的大多數空格實際上是文字制表符。 如果它沒有通過SO並正確復制/粘貼,您可能必須自己手動修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM