2012-04-01 156 views
2

我在我的Vim配置文件中有set smartindent,但在Vim中有一個我想修改的自動標籤插入方面。說,例如,我開始鍵入一個for循環:Vim:持久縮進

1. for (auto& foo : bar) { 
2. 

我打回來後,好心的Vim處插入線2的開始選項卡,正是我想要的。但是如果意識到我需要跳到文件中的其他位置來修改某些內容,然後返回到第2行,則該選項卡不再存在。每隔幾次觸碰一次標籤並不是什麼大不了的事情,因爲當我編寫一個複雜的算法,並且有很多縮進時,必須多次磨合Tab鍵會讓人感到沮喪。

什麼是最好的解決方案,以使Vim實際做自動縮進的時候,而不是隻給我插入選項卡時,我打從上一行返回了機會標籤到當前緩衝區?

感謝您的幫助!

+2

這在很多地方被討論過很多次。檢查[this](http://stackoverflow.com/q/7413036/557306)的問題,它可能會幫助你。 – sidyll 2012-04-01 16:44:15

+0

被接受的答案建議的黑客問題是,當我鍵入'}'時,縮進不會自動向左移動一個單位。另外,在縮進消失的空行上使用'cc'或'S'仍然使我處於行首的位置。 – 2012-04-01 21:35:44

+0

通過使用'filetype indent on'而不是'smartindent',你很可能會有更好的結果。 'cc'和'S'應該在這種情況下工作。來自freenode的#vim幫助頻道:「你是不是認爲愚蠢?嚴肅地說,'smartindent'對於類C語法來說是過時的選擇,它已被替換爲'cindent',並且設置'cindent'也會覆蓋'smartindent'。Vim支持多種語言的開箱即用,並且在.vimrc中設置'smartindent'(或'cindent')可能會對此產生干擾。使用'filetype plugin indent on'而且要快樂。」 – 2012-04-02 11:08:38

回答

0

它看起來像一個有意設計的行爲。當用戶跳開後又回到舊的地方(Line 2),original tabs丟失。 而不是移動到第2行,用戶可以移動到Line 1,並按,用戶可以自動縮進新的第2行。與此同時,用戶可以使用Vim提供的所有電源map甚至vimscript一個新的方式來保持old tabs。由此,我很佩服Vi/Vim的設計。

總之,當跳回Line: 1.時,請按。出現New indented Line 2.