【转】vim的制表符和空格符

来源:互联网 发布:材料 知乎 编辑:程序博客网 时间:2024/05/30 19:33

原文转自【http://my.oschina.net/captaintheron/blog/5157?from=rss】


很苦恼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


原创粉丝点击