注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

dp: 生活的脚步,进步的点滴...

Cam、DSP、FPGA、PM、Life、More ...

 
 
 

日志

 
 

Vim中的缩进  

2011-12-20 13:28:43|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
v模式选中,然后按[Shift+,或.],就是输入大于号小于号,大于号向右缩进。

-------------------------------------

对于使用vim的程序员来说,shiftwidthtabstopsofttabstop绝对是经常接触的三个缩进因素。能否有方便美观的,整体化的缩进,主要是由他们相互间的配合决定。在经过一段时间试用后,总结一下我的设置经验。

1 shiftwidth

这个是用于程序中自动缩进所使用的空白长度指示的。一般来说为了保持程序的美观,和下面的参数最好一致。同时它也是符号移位长度的制定者。

2 tabstop

定义tab所等同的空格长度,一般来说最好设置成8,因为如果是其它值的话,可能引起文件在打印之类的场合中看起来很别扭。除非你设置了 expandtab模式,也就是把tabs转换成空格,这样的话就不会一起混淆,不过毕竟制表符为8是最常用最普遍的设置,所以一般还是不要改。

3 softtabstop

如果我们希望改变程序中的缩进怎么办?shiftwidthtabstop不一样的话,你会发现程序比较难看的。这时候,softtabstop就起作用了。可以从vim的说明中看到,一旦设置了softtabstop的值时,你按下tab键,插入的是空格和tab制表符的混合,具体如何混合取决于你设定的softtabstop,举个例子,如果设定softtabstop=8, 那么按下tab键,插入的就是正常的一个制表符;如果设定 softtabstop=16,那么插入的就是两个制表符;如果softtabstop=12,那么插入的就是一个制表符加上4个空格;如果 softtabstop=4呢?那么一开始,插入的就是4个空格,此时一旦你再按下一次tab,这次的四个空格就会和上次的四个空格组合起来变成一个制表符。换句话说,softtabstop是“逢8空格进1制表符”,前提是你tabstop=8

4 关于expandtab

举个例子,在多人一起开发项目时,为了使代码风格尽量保持一致,一般不允许在代码使用TAB符,而以4个空格代之。我们可以编辑一个文件,包含下面的内容:

1 set shiftwidth=4
2 set expandtab

然后把下面的命令加入到.vimrc中:

1 autocmd FileType c,cpp set shiftwidth=4 | set expandtab

就可以只在编辑c和cpp文件时实行这种设置了。

-------------另外一篇----------------------------------------------

很苦恼python这个东西是严格缩进的,但是我在linux下用vim下的py,默认tab是8个空格那么长(其实还是一个tab,用set tabstop=4只是把缩进量给改了,还是一个tab,拿到win下依然不正常。:set softtabstop=4
也是照旧,于是按照“外事不明上GOOGLE,内事不明上BAIDU,房事不明上TIANYA”的原则,google之。发现还可以设置set expandtab,这样就可以用空格替代tab符,从而保证跨平台时缩进的一致性了。

以下是原文:

'tabstop' 在缺省状态下被设定为 8。尽管你可以改变它,但很快你就会遇到麻烦。其它
的程序不知道你用的制表符间隔值是多少,你的文件看起来会一下子改变许多。另外,很
多打印机都将制表符间隔值固定为 8。所以最好还是保留 'tabstop' 值不变。(如果你编
辑使用其它制表符间隔值的文件,请参考 |25.3| 来修正。)
如果使用 8 个空格来缩进程序,你很快就会走到窗口的最右端;而用 1 个空格又看
不出足够的差别。因此很多人喜欢用 4 个空格。这的确是个很好的折衷。
由于一个制表符 (<Tab>) 是 8 个空格,而你又想使用 4 个空格来缩进,这样你就无
法使用制表符来完成缩进。这里有两种解决办法:

1. 混合使用制表符和空格。由于一个制表符占用 8 个空格的位置,你的文件会含有更少
的字节数。插入或删除一个制表符也要比 8 个空格快很多。

2. 只用空格。这就避免了那些使用不同制表符间隔值的文件所带来的麻烦。

幸运的是,Vim 能够同时很好地支持这两种方式。


混 合 使 用 空 格 和 制 表 符

如果你使用制表符和空格的组合,你直接按正常情况编辑就行。Vim 缺省状态下,能够很
好地处理这些情况。
通过设定 'softtabstop' 可以使工作变得更简便。这个选项能使 <Tab> 看起来像是
被设定为 'softtabstop' 所指定的值,但实际上使用的确是制表符和空格的组合。
当你执行下面的命令后,你每次按下 <Tab> 键,光标都会移动到下一个 "4 列" 边
界:

        :set softtabstop=4

当你在第一列按下 <Tab> 键后,4 个空格会插入到文本中;再次按下 <Tab> 键,Vim 会
先删除那 4 个空格,然后再插入一个制表符。Vim 会尽可能地使用制表符,并辅以空格
填补。
删除会以相反的方式进行。<BS> 键总是删除 'softtabstop' 指定的数量。Vim 尽可
能地使用制表符,而用空格来填补空隙。
下面的例子显示了多次输入制表符然后使用 <BS> 的情况。"." 代表一个空格而
"------->" 代表制表符。

        输入                      结果
<Tab>                     ....
<Tab><Tab>                ------->
<Tab><Tab><Tab>           ------->....
<Tab><Tab><Tab><BS>       ------->
<Tab><Tab><Tab><BS><BS>   ....

另一种方法是使用 'smarttab' 选项。当它被设定,Vim 对每个在缩进行中的制表符使用
'shiftwidth',而对在第一个非空字符后输入的 <Tab> 使用真的制表符。但 <BS> 键不
会像在 'softtabstop' 选项下那样工作。


只 用 空 格

如果你不想在文件中出现制表符,可以设定 'expandtab' 选项:

        :set expandtab

当这个选项被设定,<Tab>键会插入一系列的空格。这样你可以获得如同插入一个制表符
一样数量的空格。但你的文件中并不包含真正的制表符。
退格键 (<BS>) 每次只能删除一个空格。这样如果你键入了一个 <Tab>,你需要键入
8 次 <BS> 才能恢复。如果你在调整缩进中,输入 CTRL-D 会更快些。


制 表 符 与 空 格 的 相 互 转 换

设定 'expandtab' 选项并不会影响已有的制表符。如果你想将制表符转换为空格,可以
用 ":retab" 命令。使用下面的命令:

        :set expandtab
        :%retab

Vim 会在所有缩进中使用空格而非制表符。但是,所有非空字符后的制表符不会受到影
响。如果你想要转化这些制表符,需要在命令中加入 !:

        :%retab!

这不大安全。因为它也许会修改字符串内的制表符。要检查这种情况是否存在,可以执
行:

        /"[^"\t]*\t[^"]*"

这里建议你不要在字符串中直接使用制表符。请用 "\t" 来替代,麻烦会少些。

将空格转化为制表符的命令则恰好相反:

        :set noexpandtab
        :%retab!

对vim的配置感兴趣的朋友可以看下:

http://vcd.gro.clinux.org/doc/usr_toc.html#usr_toc.txt

  评论这张
 
阅读(1338)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016