2011-09-25 53 views
2

Emacs在編輯C文件時強制我遵循特定的縮進。當我按壓一個不正確縮進的行時,它會糾正縮進。我想從我的vim編輯器中獲得這種行爲。直到現在我已經完成以下工作: Emacs像vim中的嚴格自動縮進

 
set cindent 
set smartindent 
set autoindent 
set expandtab 
set tabstop=2 
set shiftwidth=2 
set cinkeys=0{,0},:,0#,!,!^F 

在我的.vimrc文件中。但是,我並沒有達到我想要的那種類似emacs的強制效果。

在vim中可以嗎?

回答

11

'smartindent'已過時。你真的沒有理由需要你的vimrc。

'cindent'否決'smartindent',所以在你的vimrc中設置都是毫無意義的。在你的vimrc中設置'cindent'也不是很有用,因爲它在C類語言中只能很好地工作。

filetype indent on將啓用文件類型特定的縮進插件(c.f.,indent目錄下的$VIMRUNTIME)。與'autoindent'配對至少爲您提供基本的自動縮進支持,無論您正在編輯的文件類型如何。

如果要爲特定文件類型添加縮進設置,則可以在~/.vim/indent/<filetype>.vim~/.vim/after/indent/<filetype>.vim中創建自己的縮進腳本(如果要擴充現有系統範圍的縮進腳本)。

當您發佈秀的設置,按下Ctrl鍵˚F插入模式會做,當你按下Tab鍵Emacs的做什麼。這在:help indentkeys-format中描述。當啓用'cindent''indentexpr'爲空時,使用'cinkeys''indentkeys'是相反的。這只是一個稍微改變,以修改設置,所以選項卡可用於代替/除了Ctrlf

最後,我建議您在Vim的幫助下學習。一旦你弄清楚了,它非常全面和易於使用。 :help usr_toc是開始用戶級文檔的好地方。 :help描述了一些關於導航幫助,如何搜索主題等的基本知識。

+0

不知道Ctrl-F。謝謝。 –

2

如果我的理解正確,==命令就是你想要的。它根據語法規則重新恢復當前行。

至於綁定到標籤,這當然是可能的,但我沒有這樣做,我不完全確定如何捕捉合適的時刻,當它應該實際插入標籤,以及它應該重新生成。

個人而言,我覺得只需按==就不那麼容易混淆。 =接受一個範圍,所以你可以進入視覺模式,做出選擇並點擊=,該區域將被重新縮進。

+0

是的,==這樣做。但是,我希望我不應該明確地按下它。 Emacs知道這行應該如何縮進,並且它會自動執行,當我插入';'比如 – AnkurVj

+0

@AnkurVj這種在Emacs中的縮進被稱爲「電」,即爲某些功能提供服務的密鑰,但也在某些情況下對代碼進行格式化。它在Vim中可能有類似的名字。 –

+0

我認爲emacs在某處提到它也「嚴格地縮進」。 – AnkurVj