zoukankan      html  css  js  c++  java
  • vim Tab的设置问题

    VIM 中处理 TAB 异常的方便。

    键盘上的 TAB 键,与文件中的 TAB 符号一定要区分开,这是两个概念。

    显示当前文件中的 Tab

    /	

    实际上,就是查询 符号。

    VIM 高亮 TAB

    shiftwidth

    用于设置

    • 换行时的自动缩进列数
    • 行选择后,使用 < 或者 > 做缩进时,缩进的列数

    疑问来了!

    shiftwidth 引入的缩进,是 Tab 还是 Space?

    从测试来看

    • 如果 expandtab 开启是 Space
    • noexpandtab 且 softtabstop 与 tabstop 一致时,是 TAB 符号。

    那就是说,如果在 PHP 代码文件中,不对 Tab 做自动转换,那么代码中的缩进就是 Space 与 Tab 混用的。

    PHP 代码规范是如何规定缩进的

    PSR 是PHP Standard Recommendations 的简写。

    PSR-2: 即编码规范 http://www.php-fig.org/psr/psr-2/

    Code MUST use 4 spaces for indenting, not tabs.

    所以对于 PHP,使用如下配置即可

    autocmd FileType php setl shiftwidth=4 tabstop=4 softtabstop=4 expandtab

    expandtab 设置之后,insert 模式下按下 TAB 键就会变成 softtabstop 设置的数个 space。

    实践出真知:tabstop 与 softtabstop 的区别

    softtabstop 很好理解,即在 insert 模式下,一个 tab 键按下后,展示成几个空格。 而 tabstop 就不好理解了,需要动手测试一下

    autocmd FileType php setl shiftwidth=4 tabstop=4 softtabstop=4 expandtab

    这种配置下,自己编辑不会引入 tab, 但是如果是打开别人的 php 文件,虽然看上去缩进是一样的,但是如果用

    /	

    查看,会看到,还是存在 TAB 符号。

    再测试一下这个配置

    autocmd FileType php setl shiftwidth=4 tabstop=8 softtabstop=4 noexpandtab
    • insert 模式下,按 TAB,依然是 4 个 space。
    • 但是 insert 模式下连按两个 TAB 键,就变成了一个 TAB 符号。
    • 连续按下3个 TAB 键,就变成了一个 TAB 符号,加上 4 个空格。

    如图:

    VIM noexpandtab tabstop=8

    此时,关闭 PHP 测试文件。修改 .vimrc 如下:

    autocmd FileType php setl shiftwidth=4 tabstop=16 softtabstop=4 noexpandtab

    再次打开之前的 PHP 测试文件。会发现 TAB 符号被显示成了 16 个空格。而其之后的 space 依旧是4个。

    VIM noexpandtab tabstop=16

    这说明了什么?

    说明,tabstop 有两个作用

    • 识别多少个空格形成一个 TAB
    • 显示既有文件时,将 TAB 显示成多个个空格

    不同语言的规范并不一致

    C 语言在 Linux Kernel 中

    tabstop=8 softtabstop=8 shiftwidth=8 noexpandtab
    从 github 上看源码如图

    C 语言在 Linux Kernel 中8格缩进

    而 PHP PSR-2 则是推荐 4 空格缩进。

    当然 Python 最极端,不是 4 个空格的缩进,直接报错;并且不允许使用 TAB 作为缩进。

    将既有文件中的 TAB 符号替换为 Space

    :set expandtab
    :retab

    注意,这个操作存在风险,其不但会把缩进使用的 tab 符号替换为 space。非缩进使用的 TAB 符号也会被替换。

    转载自:https://www.sunzhongwei.com/difference-between-vim-tabstop-and-softtabstop-shiftwidth

    下面是如何设置vim缩进方法的(转载):

    找到/etc/vimrc文件(路径或者在/etc/vim/vimrc)在文件,用vim将其打开,在此文件开头加上如下
    1)设置(软)制表符宽度为4:
    set tabstop=4
    set softtabstop=4
    2)设置缩进的空格数为4
    set shiftwidth=4
    3)设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置:
    set autoindent
    4)设置使用 C/C++ 语言的自动缩进方式:
    set cindent
    5)设置C/C++语言的具体缩进方式(以我的windows风格为例):
    set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
    6)如果想在左侧显示文本的行号,可以用以下语句:
    set nu
    在此文件尾部加入如下信息:
    最后,如果没有下列语句,就加上吧:
    if &term=="xterm"
    set t_Co=8
    set t_Sb=^[[4%dm
    set t_Sf=^[[3%dm
    endif
    还有中文显示问题,
    可以添加:
    let &termencoding=&encoding
    set fileencodings=utf-8,gbk,ucs-bom,cp936
    上面这两行命令即可
  • 相关阅读:
    Math 方法的使用
    敏捷开发 故事墙
    利用OpenPOP开源组件实现接收电子邮件功能
    JDBC连接MySql数据库
    【转】"已成功与服务器建立连接,但是在登录前的握手期间发生错误"问题解决方案
    【转】如何让虚拟目录里面的webconfig不继承网站
    【转】JavaScript控制图片放大缩小
    【Wonder原创】CheckBoxList实现单选
    【杂记】ASP.Net Web开发
    【Wonder整理】防止重复提交并弹出半透明对话框
  • 原文地址:https://www.cnblogs.com/foreverlin/p/10146181.html
Copyright © 2011-2022 走看看