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

原创 2014年11月21日 13:54:48

    下面的内容,有一部分来自于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呢呵呵~~~,我是不适合的。

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

vim tab设置为4个空格

在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:set ts=4  (注:ts是tabstop的缩写,设TAB宽4个空格)set expandtab对于已保存的文件,可以使用下...
  • jiang1013nan
  • jiang1013nan
  • 2011年04月02日 16:37
  • 165108

VIM 太牛了

=============================== 话不多说,先来看看效果 =============================== =============...
  • gbxvip
  • gbxvip
  • 2016年06月23日 16:11
  • 3487

Vim 的 tab 设置

摘自 Vim 手册:选项:1. tabstop:表示一个 tab 显示出来是多少个空格,默认 82. softtabstop:在编辑的时候一个 tab 是多少个空格3. expandtab/noexp...
  • shell_picker
  • shell_picker
  • 2010年11月24日 18:53
  • 20802

vim tab技巧

在修改实际代码中,产生的diff文件在不同的工具上浏览时候会出现各种对齐问题,看着很是丑陋。 于是会直接在.vimrc中指定"set expandtab" 选项来把tab直接换成tabstop或...
  • dongqinliuzi
  • dongqinliuzi
  • 2014年09月13日 17:36
  • 391

vim的shiftwidth、tabstop、softtabstop设置

1 shiftwidth这个是用于程序中自动缩进所使用的空白长度指示的。一般来说为了保持程序的美观,和下面的参数最好一致。同时它也是符号移位长度的制定者。2 tabstop定义tab所等同的空格长度,...
  • ludonghai715
  • ludonghai715
  • 2010年06月09日 10:57
  • 8994

vim的shiftwidth、tabstop、softtabstop设置 (我都设置成4了)

1 shiftwidth 这个是用于程序中自动缩进所使用的空白长度指示的。一般来说为了保持程序的美观,和下面的参数最好一致。同时它也是符号移位长度的制定者。 2 tabstop 定义tab所等同的空...
  • yefengxuelang
  • yefengxuelang
  • 2013年12月09日 15:25
  • 1565

vim tab设置为4个空格

在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格: set ts=4 (ts是tabstop的缩写,设置TAB宽4个空格) set expandtab 对于已保存的文件,可...
  • feiyangyangfei
  • feiyangyangfei
  • 2013年12月28日 13:19
  • 4610

Vim 的 tab 设置

摘自 Vim 手册:选项:1. tabstop:表示一个 tab 显示出来是多少个空格,默认 82. softtabstop:在编辑的时候一个 tab 是多少个空格3. expandtab/noexp...
  • shell_picker
  • shell_picker
  • 2010年11月24日 18:53
  • 20802

Vim 缩进总结

在linux上编辑文件时,有时候从别的地方copy过来的代码要缩进,如果一行一行的搞,忒麻烦耗时了,下面是自己使用中不同模式下的一些缩进快捷方法:一、 normal 模式下 >> 当前行增加缩进...
  • jobschen
  • jobschen
  • 2016年08月26日 14:54
  • 3028

vim设置tabstop,自动缩进没变

vim中默认的su
  • chienchia
  • chienchia
  • 2014年08月28日 14:24
  • 1202
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vim中tabstop、shiftwidth、softtabstop以及expandtab的关系
举报原因:
原因补充:

(最多只允许输入30个字)