下面的内容,有一部分来自于http://blog.sina.com.cn/s/blog_4bd803310100saf1.html这个网址,也不能说是百分之百原创了,呵呵~~~
先贴出原始类型部分学习以后,写在下面有一部分心得
vim中的tab键设置
基本上在 Vim 可以使用
來設定 tab 寬。
而使用
來將 tab 轉成 space (實際存起來的檔案將會是以 space , not tab )
如果要將既有的 <Tab> 轉成 space 可以再 expandtab 之後輸入:
來做轉換。
而 tabstop 是實際上讀到檔案的 \t (Tab 字元) 時,要解譯為幾個空白
通常設定為 4
另外 softtabstop 則是,你在編輯動作 (Backspace) 或是 (Tab) 時,對空白的解譯
譬如說:
新加入的 Tab 都會是 \t , Tab 為 4 個 space ,讀取檔案的 \t 會被翻譯為 4 個 space ,在操作 BS 的時候,4 個空白會被當作一個 tab 刪除。
實際上 softabstop 比較常用在 expandtab 的模式下:
如此被延展為空白的 space 也可以像是 tab 一樣被刪除固定的 space 數(softtabstop=4)附帶一題,由於 tab 每個人的用法都不一樣,而且變化很多而現在很多專案都只使用 space 而不使用 tab 了!
也就是:
這樣的設定通常是被建議的。
當然如果你寫 python 就不一樣。 :p
這邊順便引入 vim help 的 'tabstop' 章節:
only) for any tabstop setting that people use.
>
>
>
>
> 新加入的 Tab 都會是 \t , Tab 為 4 個 space ,讀取檔案的 \t 會被翻譯為 4 個
> space ,在操作 BS 的時候,4 個空白會被當作一個 tab 刪除。
註:這邊的 "翻譯為 4 個 space" 是說,顯示是四個 space 的寬度,實際上存檔還是存成 \t (Tab)
不知道理解得对不对,在我尝试后有这样的一个前题,即“vim对于空白符要么是通过全space来实现【expandtab】上面的缩进和\tab,要么最少化\t和space【noexpandtab】”,这个前题,请大牛斧正一下。
关于tabstop、shiftwidth、softtabstop以及expandtab这几个参数在网上找了相关资料怎么也没有整明白是怎么一回事。只有上面这篇文章看了以后还靠点谱,就自已实践后所得的一些心得:
1、先说一下,tabstop本身吧,如上面文中说讲其实就是一个常量,进行\t与space的宽度兑换,即一个\t能兑换成多少个宽度的space字符。如果在没有设置softtabstop之前(即softtabstop=0)。如果触发一个\t操作输入时间兑换成的tab宽度就是一个\t且宽度等于tabstop,还有就是作为读档时一个\t键能占多少个宽度。这个大家都能明白不
2、接着说一下shiftwidth它是一个缩进的长度设置。要想使用你的代码看起来更美观,他与其它的组合(tabstop、softtabstop以及expandtab)有很多种这里一般推荐上面的第二种,一般推荐上面的.他也有间接的充当了扳机的作用,就是如果你在进行多少个缩进的时候并且是expandtab这个时候他也有合并的操作就是如果shiftwidth满足多少个长度等于tabstop时兑换成一个\t,当然这里面有一个重要的概念就是关于\t键的对齐,上面满足兑换条件的前题之前的前题就是\t的对齐,能理解吗?慢慢实践吧
3、softtabstop是一个转换器,当你通过键盘触发了一个\t操作时,他会将其转换为多少个宽度的字符,但是vim中此时他只点有\t而不是很多个你设定的sottabstop的宽度的spaces,这个属性是一个很有意思的东西。当你开启他时(即 softtabstop!=0),这个时候只要点击键盘上的Tab键时,就会触发一个兑换与合并的功能(当然这个你得开启noexpandtab这个属性,这个属性下面会讲),那么这个时候就输入的tab就不是直接输入到vim中了,这个时候tab键就充当一个扳机触发了兑换与合并的操作,当然如果expandtab了,那么你键入tab键时,就直接总换成softtabstop所对于的宽度的space了
4、现在是expandtab了,当然就是展开了。就是将所有输入到vim中的\t转化成为多少个空格了,
4.1)如果未开启softtabstop,则直接展开tabstop常数个spaces
4.2)如果开启sfottabstop,那么就以softtabp为常数个spaces
如果noexpandtab,那么就是解释上同不过仅仅是一个\t点用多少个宽度的spaces的位置(注意了,其实质是占位)。
心得到此了。还有什么要说的呢。就是解释一下,上面那几种配置吧
1、这个就是前面提到的大前题了,即最小化\t与spaces实现空白符,他实现了\t实体键入的与softtabstop之前的兑换。同样是shiftwidth进行缩进时的spaces与\t之前的兑换。适合于window时下的编辑程,当然如果你公司要求通过spaces来实现缩进下面的更适合你了
2、第二个配置是展开了,就不多说了,只要你把shiftwidth与tabstop配置得与你代码看起来好看,你怎么配都可以
3、这个就是只有在vim下,编辑与查看了。这个有局限
4、这个只有你实践以后才知道,就是\t对齐惹的祸。没有办法说明白,实践实践就出来了。
如果你的公司有代码要求不用\t来代表缩进的话那么2适合你,3呢不知道,4呢呵呵~~~,我是不适合的。
到这里就完了,如果理解有问题请来者您留下你的智慧~~~