2010-01-28 76 views
42

我是一個長期的Vim用戶(3或4年),他最近開始處理一些深度嵌套的代碼。此代碼使用空格縮進,而不是製表符。我想要一些乾淨而不干擾的縮進指示,以幫助跟蹤我在查看多層次深度內的代碼塊時的情況。是否可以在Vim中顯示縮進指南?

:set list 

只顯示製表符和結束符。我發現了一個插件(目前似乎無法挖掘它),它會以逐漸變暗的顏色突出顯示每個縮進級別,但這在視覺上並不吸引人。理想情況下,我希望在每個縮進級別看到細的垂直線條。許多新編的編輯器都具有這種功能,但我不願意放棄Vim。

有沒有人知道這是如何實現的?

+0

看看https://github.com/nathanaelkane/vim-indent-guides – 2014-02-27 16:47:00

回答

1

試用此VIM插件BlockHL 它以不同方式對每個連續級別的縮進進行顏色編碼。

編輯:你使用什麼lanaguge?這個插件適用於C風格的語言。

+1

我最需要的兩種語言是Perl和Xml。 我曾經遇到過這個插件,並且正在尋找一些比塊高亮更簡潔的東西 - 比如細的垂直線條。 – mjn12 2010-01-28 22:17:39

25

你可以使用標籤來顯示縮進引導和保存文件前刪除標籤:

" use 4 spaces for tabs 
set tabstop=4 softtabstop=4 shiftwidth=4 

" display indentation guides 
set list listchars=tab:❘-,trail:·,extends:»,precedes:«,nbsp:× 

" convert spaces to tabs when reading file 
autocmd! bufreadpost * set noexpandtab | retab! 4 

" convert tabs to spaces before writing file 
autocmd! bufwritepre * set expandtab | retab! 4 

" convert spaces to tabs after writing file (to show guides again) 
autocmd! bufwritepost * set noexpandtab | retab! 4 
+0

來自Nikolay的回答>「顯示縮進指南」> set list listchars = tab:|-,trail:·,extends:»,before:«,nbsp:×在XP上使用gVim我必須在我的vimrc中轉義管道字符,如> tab:\ | - 否則我得到了E474:無效參數:lcs = tab: – 2010-08-05 06:04:59

+0

listchar = tab:| - 不能用於空格 – 2012-05-05 00:04:16

+0

這正是我一直在尋找的,謝謝! – seagoj 2014-02-28 21:48:50

15

這將顯示圓點,表示你的縮進級別爲你鍵入。當你離開這條線時,這些點奇蹟般的消失。

set list listchars=tab:»-,trail:·,extends:»,precedes:« 

E.g:

def test(): 
....print('indentation level 1') 

很酷吧?

+0

這是真棒 – sunil 2013-03-08 11:58:43

+0

它不適用於MacVim 8.0.502(129)我,他們不會消失離線。 – 2017-03-29 19:23:56

15

可能最有效的解決方案是使用匹配突出顯示「繪製」縮進指南 。要了解它如何幫助,看看下面這個例子:

:match Search /\%(\_^\s*\)\@<=\%(\%1v\|\%5v\|\%9v\)\s/ 

它突出(使用搜索高亮組,它可以使用任何 等,當然)的第一,第五,第九(它可以是繼續) 虛擬列佔用的空格符號前面沒有任何內容,但是從 開始的行中有空格。所以,這產生四空間縮進,突出顯示 三個層次的深度。

爲了概括這個想法它仍然只是產生像根據以上提及的是 圖案當前緩衝區的textwidthshiftwidth (處理更深縮進水平和適當的縮進寬度)。這個任務可能是 只是自動化,如下面的功能所示。

function! ToggleIndentGuides() 
    if exists('b:indent_guides') 
     call matchdelete(b:indent_guides) 
     unlet b:indent_guides 
    else 
     let pos = range(1, &l:textwidth, &l:shiftwidth) 
     call map(pos, '"\\%" . v:val . "v"') 
     let pat = '\%(\_^\s*\)\@<=\%(' . join(pos, '\|') . '\)\s' 
     let b:indent_guides = matchadd('CursorLine', pat) 
    endif 
endfunction 

每當你需要縮進導遊的緩衝時間,可以通過 :call ToggleIndentGuides()接通。當然,您可以更改突出顯示組 (或僅爲縮進指南創建一個特殊的縮略圖),爲此設置一個方便的 映射並且/或者從autocmd爲某些文件 類型調用它。


縮進引導從我.vimrc 文件突出配置:https://gist.github.com/734422

+0

這很好,但它可以顯示更多的每4個空格的崇高文本風格垂直線? – seagoj 2014-02-28 21:39:51

+0

@seagoj:不幸的是,即使在GVim中也不可能繪製出實際的圖形線條,最接近的是每個'shiftwidth'位置突出顯示空格的列,這正是這裏提出的解決方案確實。 – 2014-03-01 08:07:25

+0

@ nikolay-fransev的解決方案基本上是我正在尋找的。 – seagoj 2014-03-01 21:09:36

65

注意:這個答案是有點遲到了,也是一個無恥的插頭:)

無論如何,嘗試我的Indent-Guides.vim插件。它的創建是爲了在vim中缺乏縮進指南而搔癢自己的癢癢。我厭倦了等待別人來建造它,所以我只是自己做了。

特點:

  • 可以檢測標籤和空間縮進風格。
  • 自動檢查您的顏色配方並選擇合適的顏色(僅限gVim)。
  • 將突出顯示交替顏色的縮進級別。
  • 全面支持gVim和Terminal Vim的基本支持。
  • 似乎可以在Windows上運行gVim 7.3(儘管如此,還沒有做過任何廣泛的測試)。
  • 縮進指南的可自定義大小,例如。精簡指南(僅適用於軟標籤)。
  • 可自定義的開始縮進級別。

下面是插件的幾個截圖:put your mouse here and click

+3

有沒有人得到這個在非Windows的機器上工作?無論是否通過Pathogen,無論是vim還是gvim,我都無法加載它。即使幫助文件未被加載 – puk 2012-02-21 23:08:20

+1

@puk:使用MacVim(Vim 7.3)和Pathogen對我來說工作正常。 – 2012-02-29 14:40:57

+0

你碰巧還在爲此工作?就個人而言,我喜歡Notepad ++的縮進指南,並且我希望看到gVim也這樣做...... – polemon 2012-06-27 19:06:57

22

如果您用空格縮進代碼,您可以嘗試我的插件:https://github.com/Yggdroot/indentLine,它會顯示細的垂直線條,但不會顯示上面的回答中提到的粗垂直線條。如果你用標籤縮進代碼,只需要:set list lcs=tab:\|\ (here is a space)

+4

你需要透露它是你的項目。答案只是一個鏈接,因此很沒用。 – ThiefMaster 2012-12-06 10:35:54

+0

添加突出顯示活動塊縮進指南!:D喜歡在Sublime Text和Notepad ++中。 – trusktr 2013-04-15 02:34:44

+7

@ThiefMaster誰在乎他是否沒有透露它是他的項目?這是一個有效的答案。有可能有縮進問題(使用*他*插件),但它是免費的,開源的......所以誰在乎他是否不透露他的?他提供了一個解決方案。 – trusktr 2013-04-15 02:35:45

0

使用Indent-Guides.vim插件,並在需要時切換使用ig。有時候它可能會很煩人:)