vim中tabstop、shiftwidth、softtabstop以及expandtab的关系

    下面的内容,有一部分来自于http://blog.sina.com.cn/s/blog_4bd803310100saf1.html这个网址,也不能说是百分之百原创了,呵呵~~~

     先贴出原始类型部分学习以后,写在下面有一部分心得

   vim中的tab键设置

基本上在 Vim 可以使用

         set shiftwidth=4

來設定 tab 寬。

而使用

         set expandtab

來將 tab 轉成 space (實際存起來的檔案將會是以 space , not tab )

如果要將既有的 <Tab> 轉成 space 可以再 expandtab 之後輸入:

        :retab!

來做轉換。

而 tabstop 是實際上讀到檔案的 \t (Tab 字元) 時,要解譯為幾個空白

通常設定為 4

         set tabstop=4

另外 softtabstop 則是,你在編輯動作 (Backspace) 或是 (Tab) 時,對空白的解譯

譬如說:

         set noexpandtab
         set sw=4
         set tabstop=4
         set softtabstop=4

新加入的 Tab 都會是 \t , Tab 為 4 個 space ,讀取檔案的 \t 會被翻譯為 4 個 space ,在操作 BS 的時候,4 個空白會被當作一個 tab 刪除。

實際上 softabstop 比較常用在 expandtab 的模式下:

         set expandtab
         set sw=4
         set tabstop=4  " 怕檔案裡頭仍有 \t
         set softtabstop=4

如此被延展為空白的 space 也可以像是 tab 一樣被刪除固定的 space 數(softtabstop=4)附帶一題,由於 tab 每個人的用法都不一樣,而且變化很多而現在很多專案都只使用 space 而不使用 tab 了!

也就是:

         set et sw=4 ts=4 sts=4

這樣的設定通常是被建議的。

當然如果你寫 python 就不一樣。 :p

這邊順便引入 vim help 的 'tabstop' 章節:

   There are four main ways to use tabs in Vim:

       1. Always keep 'tabstop' at 8, set 'softtabstop' and'shiftwidth' to 4(or 3 or whatever you prefer) and use 'noexpandtab'. Then Vim will use a mix of tabs and spaces, but typing <Tab> and <BS> will behave like a tab appears every 4 (or 3) characters.

       2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use 'expandtab'.  This way you will always insert spaces.  The formatting will never be messed up when 'tabstop' is changed.

       3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a |modeline| to set these values when editing the file again.Only works when using Vim to edit the file.

       4. Always set 'tabstop' and 'shiftwidth' to the same value, and 'noexpandtab'.  This should then work (for initial indents
only) for any tabstop setting that people use.  It might be nice to have tabs after the first non-blank inserted as spaces if you do this though. Otherwise aligned comments will be wrong when 'tabstop' is changed.

      

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

      

       On Feb 5, 11:17 pm, c9s <cornelius.h...@gmail.com> wrote:

>         set noexpandtab
>         set sw=4
>         set tabstop=4
>         set softtabstop=4

> 新加入的 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呢呵呵~~~,我是不适合的。

到这里就完了,如果理解有问题请来者您留下你的智慧~~~

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页