最后更新于 .

前段时间有朋友在微博上@我推荐了一款vim的插件,用来显示对齐线,感觉效果不错,就给大家推荐一下.

下载链接: Indent Guides

截图如下:

1

一. 安装

不用多说,直接解压放到vimfiles or .vim下

二. 配置

基本可以不用配置,不过由于默认的对齐线宽度太宽,不太美观,所以我改成1了,如下

let g:indent_guides_guide_size=1

详细的配置,可以参看他的文档,这里不再多说

三. 使用

默认的键盘映射是

<mapleader>ig

OK,插件就介绍到这里,其实如果只是单纯的介绍插件,就不用写这篇文章了。

我在用这个插件的时候,又发现了另一个需求,即标尺的功能。vim7.3里面默认提供了colorcolumn,例如执行:

:set cc=80

就可以高亮第80列,效果如下:

1

但是有时候我们想看一下几行的字符是不是在同一列上时,手工去输入列数实在太麻烦了,所以我就单独写了一个函数,来满足这个需求:

map ,ch :call SetColorColumn()<CR>
function! SetColorColumn()
    let col_num = virtcol(".")
    let cc_list = split(&cc, ',')
    if count(cc_list, string(col_num)) <= 0
        execute "set cc+=".col_num
    else
        execute "set cc-=".col_num
    endif
endfunction

按下,ch 就可以将当前光标下的列高亮,再按下一次,取消高亮;并且可以同时多列高亮。

这两个工具搭配在一起使用,相信会取得更好的效果。

OK,就是这样~

Pingbacks

  1. 第四部 &raquo; 博客推荐14:Vimer的程序世界 on #

    [...] vim(gvim)支持对齐线 [...]

  2. vim(gvim)支持对齐线multiprocess | multiprocess on #

    [&#8230;] By Dante [&#8230;]

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. 依云

    依云 on #

    「将当前光标下的列高亮」——:set cuc。

    Reply

    1. Dante

      Dante on #

      依云你太牛了。。总感觉你已经把vim文档都背熟了的说。。果然下次发文前应该先和你私下沟通一下是否已经有解决方案了。。。

      Reply

      1. 依云

        依云 on #

        呵呵,对于 Pythoner 来说,这个需求很常见啦。

        Reply

  2. DD

    DD on #

    求上边截图配色方案,很舒服的感觉~~~

    Reply

    1. Dante

      Dante on #

      好像是依云推荐的,manuscript.vim

      Reply

      1. 依云

        依云 on #

        我怎么不记得了……不过这个配色我确实有记载的。

        Reply

  3. geek42

    geek42 on #

    我也是用 cursorcolumn
    同依云,对于pytoner, 这个对齐太重要了

    另外推荐用vim73 那个cuc效果很棒

    Reply

    1. 依云

      依云 on #

      vim73 新支持的特性是 cc,cuc 早就支持了的哦。

      Reply

  4. fishy

    fishy on #

    前面那个 :set cc=80 其实不太好。在 vimrc 里面 set textwidth=80 然后 :set cc=+1 要更好一点。

    Reply

    1. Dante

      Dante on #

      赞同~

      Reply

  5. Syndim

    Syndim on #

    LZ的配色是什么?能分享下么?

    Reply

    1. Syndim

      Syndim on #

      另外这个能区分tab和空格么?

      Reply

      1. 依云

        依云 on #

        你如果也是 Pythoner 的话,去 ftplugin/python.vim 里加两句就好啦。

        setl et
        setl tw=8

        Reply

        1. 張旭

          張旭 on #

          您好!我還不是一個 pythoner
          可是我想讓 vim 顯示 tab 或空格、行尾換行符號,請問也是這樣做嗎?

          我已經 set tabstop=4
          這樣 tab 應該是已經取代成空格了

          Reply

          1. 依云

            依云 on #

            set list

            Reply

  6. 自由建客

    自由建客 on #

    我一直用 :set lcs=tab:\|\ 一直困扰空格缩进怎么办!C 代码我一直用四个空格缩进的。
    另,python 以版式定逻辑真够蛋疼的。

    Reply

    1. fifver

      fifver on #

      将空格转换为tab,可使用以下命令
      :set noexpandtab
      :%retab

      Reply

      1. 自由建客

        自由建客 on #

        我要的就是空格而非制表符!

        Reply

        1. fifver

          fifver on #

          不好意思,又重新看了一遍上面的留言。如果你是指缩进线的话,又不想使用上面的方法,那么你可以试一试这个插件(Indent Guides):http://www.vim.org/scripts/script.php?script_id=3361。若你已用过,或是所指其它,我也不清楚了,抱歉。

          Reply

          1. 自由建客

            自由建客 on #

            哈哈……我的意思就是说我看到这篇文章就找到解决方案了。

            Reply

    2. Yggdroot

      Yggdroot on #

      这个插件满足你的要求:https://github.com/Yggdroot/indentLine,效果跟Indent Guides不同,Indent Guides显示的是很粗的“线”,这个插件显示的很细。

      Reply

  7. jemyzhang

    jemyzhang on #

    发现在.vimrc中用colorscheme,然后这个guideline就不会出来了,是不是color_autodetect有问题?有人碰到过吗?

    Reply

  8. justin.yqyang

    justin.yqyang on #

    enable hicolumn in .vimrc can do the same thing

    Reply

    1. 張旭

      張旭 on #

      您好!請問可以說得更清楚些嗎?
      you mean :set hicolumn ?

      Reply

  9. hellowrold

    hellowrold on #

    您好,我想请教一个问题。在vim里面怎么匹配一个制表符?例如有一行内容是用tab键和空格隔开的几个单词,我想匹配用tab隔开的然后加一个换行符,用%s/\t/\r/g似乎不行啊。

    Reply

    1. 依云

      依云 on #

      查找时使用 \n 表示 EOL(行结束)。

      Reply

  10. hellowrold

    hellowrold on #

    我的意思是例如下面:

    坦克 fire in the hole
    飞机 I can fly.

    坦克和飞机后面跟的是制表符,而后面的单词跟的是空格。怎么正则成下面的形式:

    坦克
    fire in the hole
    飞机
    I can fly

    Reply

    1. yefei

      yefei on #

      你是在windows下用的gvim吧,windows中换行符是^M,先按ctrl-Q,再按ctrl-M就可以输入了换行符了,替换的时候把你的表达式中的 \r 替换成这样的表示就行了

      Reply

      1. hellowrold

        hellowrold on #

        换行没问题的,关键是怎么区分空格和制表符,单词之间是空格,而前面用的是制表符。虽然可以用\s来替换空白,但没法区分啊

        Reply

        1. -

          - on #

          正则匹配就是\t,如果没有匹配到,先要检查下是否不是制表符。

          Reply

  11. Ni许嵩

    Ni许嵩 on #

    您好!请问,vim有没有可以根据等号对齐的插件?
    比如说,有多个给变量赋值的语句,如:
    $a = 1;
    $ab = 2;
    $abc = 3;
    $abcd = 4;
    $abcde = 5;

    有没有办法实现,所有的 = 都在同一列,而且 = 之后每行的空格个数是相同的?
    谢谢您!

    Reply

    1. ccjjxl

      ccjjxl on #

      vim插件(tabular)

      Reply

      1. Ni许嵩

        Ni许嵩 on #

        谢谢您!

        Reply

  12. edi

    edi on #

    为什么我复制了插件进去 没效果呢

    Reply

    1. 咖啡小冰

      咖啡小冰 on #

      我复制进去了,也没效果。

      Reply

      1. Dante

        Dante on #

        7.3 么?

        Reply

  13. 張旭

    張旭 on #

    vimer 您好!

    我照你說的將套件放到 .vim 解壓縮,
    然後輸入 ctrl+, 接着輸入 ig(我的 mapleader 是 ctrl+,)
    結果底下出現:
    http://images.plurk.com/5c94f92a93dfb87454376434bab3ddee.jpg

    壓下 enter 後,變成:
    http://images.plurk.com/0539cf3d5961eb8349c7a916eb274e95.jpg

    可以指點一下嗎?謝謝!

    Reply

    1. -

      - on #

      根据截图中的关键字搜索,然后参考下面两个连接的描述,应该是你的colorschema可能存在问题:
      http://hlee.iteye.com/blog/1664838
      https://github.com/nathanaelkane/vim-indent-guides/issues/31

      你可以试试链接中的解决方案:
      adding
      colorscheme default
      to .vimrc

      Reply

  14. liu1061

    liu1061 on #

    请问一个有没有指定特定行高亮的方法或者操作啊
    就是像set cc = n, n列就高亮,行高亮有没有啊!谢谢!

    Reply

    1. Dante

      Dante on #

      这还真没有,但是你可以通过 high light配置出来

      Reply

    2. aptx4869

      aptx4869 on #

      话说你不觉得这
      :set cc=80
      配色效果好难看么……

      所以我会再设置一下

      :hi ColorColumn cterm=underline ctermbg=8

      之类的

      Reply

      1. Dante

        Dante on #

        嗯,我之前有设置过,后来觉得还不如红色显眼,虽然丑点。。

        Reply

  15. 看不懂

    看不懂 on #

    楼主,我这样做:
    下载然后解压,然后把插件目录放到vimfiles目录下,重启gvim7.3(xp系统),可是什么都没发生,能介绍的详细点吗?谢谢

    Reply

  16. Yggdroot

    Yggdroot on #

    借宝地帮着宣传https://github.com/Yggdroot/indentLine这个插件,支持用空格缩进的对齐线的显示。

    Reply

    1. Lex

      Lex on #

      请问你这个插件如何开启

      Reply

      1. Yggdroot

        Yggdroot on #

        默认是开启的。

        Reply

    2. leyle

      leyle on #

      对比了博主和你的插件,还是你这个插件好用些,颜色调浅到基本不影响查看源代码时,仔细看又能看到那个对齐线,就很好了,多谢你开发了这个插件。

      Reply

  17. 学习了

    学习了 on #

    为什么我怎么都不会出现了?mapleader ig 这句是什么意思?

    希望指点 谢谢

    Reply

    1. endle

      endle on #

      个人理解是按住一个被定义为 mapleader 的键盘按键,然后按i 再按g
      默认应该是 \ 吧

      Reply

      1. seanchen

        seanchen on #

        let mapleader =',' "先设置先置命令,leaper
        let g:mapleader =',' "先设置先置命令,leaper
        LZ,我的设置如上,但是还是不会用mapleader,是按着mapleader不放按其他的,还是按照顺序按呢?总之没出现你的效果啊~菜鸟求解答哦~

        Reply

        1. endle

          endle on #

          我的做法是 按住mapleader不松手,然后先按 i,再按 g,最后松开mapleader
          我也是一知半解,没法给更多的解答

          Reply

          1. -

            - on #

            mapleader的话,我个人的理解就好像组合键,而且mapleader也是分模式的,简单地说,你可以认为他是一个自定义的ctrl键,首先定义mapleader,然后在定义其他映射时就可以直接使用一个变量,而不是使用实际的leader键了,好处是更换leader时更方便;
            比如说:键盘上的各键位大部分都初始化定义了一些功能,我新增的键位映射,如果不想覆盖原有的配置,只能使用其他的,但是使用crtl或者alt这类的组合键按起来较远并且不方便,就可以使用leader+键位这种方式,增加可以设置的组合键,同时更重要的是,如果不使用leader+键位这种方式直接设置映射为,+ig这种方式,以后更换键位映射时要逐条修改,容易发生遗漏并且不利于键位映射的管理。

            Reply

  18. D瓜哥

    D瓜哥 on #

    好牛逼啊!希望俺能尽快把vim学好,哈哈

    Reply

  19. endle

    endle on #

    翻了 github 上的文档才知道
    let g:indent_guides_guide_size=1
    是需要设置 soft-tab 的,否则无效。
    难道只有我一个人因为这个问题纠结很久吗?

    Reply

    1. Corey

      Corey on #

      还有我还有我!你不是一个人,终于知道怎么解决了,感谢!!

      Reply

      1. Corey

        Corey on #

        我能说还是没解决吗,我按照github的截图的第二个设置,一模一样,但是宽度还是没变

        Reply

        1. Corey

          Corey on #

          我懂了,制表符都会变色,只有用空格来缩进才行

          Reply

  20. sarrow104

    sarrow104 on #

    用了若干年的vim,觉得它在可视化显示的地方,真丑陋。比如博主提到的上述两个东西。

    另外,楼上的endle,ig 的意思就是连续按和i,g这三个按键而已。不是你想的那么复杂——当然,间隔时间不能太长,不然vim会分别理解这三个按键。

    Reply

    1. endle

      endle on #

      写下哈。我给想麻烦了

      Reply

  21. sarrow104

    sarrow104 on #

    Orz 测试:&lt;mapleader&gt;

    Reply

  22. ma6174

    ma6174 on #

    https://github.com/ma6174/vim/raw/master/screenshot.png

    Reply

  23. adf

    adf on #

    楼主太强了。
    对IT还这么喜欢。
    只是楼主还不知道你的同学在做销售已经赚了多少钱而已吧?

    Reply

    1. Dante

      Dante on #

      实在没能理解你说这些话的意思。

      Reply

      1. -

        - on #

        我觉得层主的意思是不是说让楼主了解下其他同学现在的经济情况,比如说收入如何,有没有固定资产,从事什么行业等等。

        Reply

  24. goldcome

    goldcome on #

    vim自带就行了 :set cursorcolumn 可以满足需求

    Reply

  25. favajing

    favajing on #

    你好,我的vim7.3里下载了插件也复制了所有文件,可是没有效果 vim输入 /ig 提示找不到模式,头都搞大了-_-

    Reply

  26. 小行

    小行 on #

    :set cul光标所在行高亮显示,这个功能也很棒的。

    Reply

  27. 无聊男

    无聊男 on #

    这个插件如何配置打开文件直接起作用

    Reply

  28. 天女下凡很麻烦

    天女下凡很麻烦 on #

    每次使用都要:IndentGuidesEnable要怎么配置vimrc文件?

    Reply

    1. 六翼拉菲尔

      六翼拉菲尔 on #

      :IndentGuidesEnable放在rc里面就ok了

      Reply

  29. linuxie

    linuxie on #

    为什么我设置了soft-tab,还是那么粗呢,奇丑无比啊~呼叫vimer~~

    Reply

    1. linuxie

      linuxie on #

      额,已经解决了,果然只有空格来缩进才行~

      Reply

  30. linuxie

    linuxie on #

    ......这是要挑衅么。。。

    Reply

    1. linuxie

      linuxie on #

      回复adf的

      Reply

  31. aoenian

    aoenian on #

    你好,我按照你的命令直接在vim的命令行执行就可以,但是写入 .vimrc 文档里面就没有作用,这个是什么原因呢?

    Reply

发表评论