[英]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
的模板。
更新:
其他人建議使用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.