vim Tab的设置问题
VIM 中处理 TAB 异常的方便。
键盘上的 TAB 键,与文件中的 TAB 符号一定要区分开,这是两个概念。
显示当前文件中的 Tab
/\t
实际上,就是查询 \t 符号。
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 spaces for indenting, not tabs.
所以对于 PHP,使用如下配置即可
autocmd FileType php setl shiftwidth= tabstop= softtabstop= expandtab
expandtab 设置之后,insert 模式下按下 TAB 键就会变成 softtabstop 设置的数个 space。
实践出真知:tabstop 与 softtabstop 的区别
softtabstop 很好理解,即在 insert 模式下,一个 tab 键按下后,展示成几个空格。 而 tabstop 就不好理解了,需要动手测试一下
autocmd FileType php setl shiftwidth= tabstop= softtabstop= expandtab
这种配置下,自己编辑不会引入 tab, 但是如果是打开别人的 php 文件,虽然看上去缩进是一样的,但是如果用
/\t
查看,会看到,还是存在 TAB 符号。
再测试一下这个配置
autocmd FileType php setl shiftwidth= tabstop= softtabstop= noexpandtab
- insert 模式下,按 TAB,依然是 4 个 space。
- 但是 insert 模式下连按两个 TAB 键,就变成了一个 TAB 符号。
- 连续按下3个 TAB 键,就变成了一个 TAB 符号,加上 4 个空格。
如图:
此时,关闭 PHP 测试文件。修改 .vimrc 如下:
autocmd FileType php setl shiftwidth= tabstop= softtabstop= noexpandtab
再次打开之前的 PHP 测试文件。会发现 TAB 符号被显示成了 16 个空格。而其之后的 space 依旧是4个。
这说明了什么?
说明,tabstop 有两个作用
- 识别多少个空格形成一个 TAB
- 显示既有文件时,将 TAB 显示成多个个空格
不同语言的规范并不一致
C 语言在 Linux Kernel 中
tabstop= softtabstop= shiftwidth= noexpandtab
从 github 上看源码如图
而 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缩进方法的(转载):
vim Tab的设置问题的更多相关文章
- vim tab 中设置title
在.bashrc添加 export PROMPT_COMMAND='echo -ne "\033]0;your wanted title\007"'
- VIM - tab 相关的简单配置
1. 概述 vim 是强大的文本编辑器 使用 vim 前, 需要做些简单配置, 来让 vim 更符合自己的操作习惯 想看配置项的, 直接到最后 2. 准备 安装 vim 略 配置文件 位置 /etc/ ...
- Vim代码缩进设置
前段配置VPS,无奈只能使用Vim编辑Python代码,比较头疼的没法设置自动缩进,所以搜索了相关的配置,特记录如下. 将以下的设置加入到~/etc/vim/.vimrc中: set sw=4 set ...
- vim vi Ubuntu 设置
1. 在vi编辑模式下按退格键不能删除内容,按方向键不能上下左右移动?如果是则:一 在vi里非编辑模式下按冒号进入到末行命令模式,然后输入set nocompatible,回车,然后在进入vi编辑模式 ...
- Vim增强工具设置
Vim增强工具设置操作准备:vim ~/.vimrc11. 缩进 & 制表符使 Vim 在创建新行的时候使用与上一行同样的缩进: set autoindent 2. 设置文件里的制表符 (TA ...
- vim 编辑器的设置
vi编辑器的配置:http://blog.mcuol.com/User/fenghua/Article/17411_1.htm ******************************vim ~/ ...
- IAR修改工程名称Tab键设置模板建立
IAR 修改工程名称 很多时候用IAR开发都是基于已有工程模板开发的,但是工程模板的名称经常让人头疼:以下是修改办法: 从一个实例工程复制后缀名为"dep,ewd,ewp,eww" ...
- vim各种编码设置问题
vim各种编码设置问题 vim中主要有四个编码相关的设置,详细是~/.vimrc中: 下面是我的设置: set fileencodings=gb18030,utf-8,gb2312,gbk: set ...
- idea关于tab的设置
新手使用,一不小心tab显示在右面了,这不学习下给搞正常点. settings===>Editor=====>Editor Tabs; Palacement设置的是tab显示的部位: Ta ...
随机推荐
- 【左偏树】[APIO2012]派遣
题意可真的是有毒 第一眼树形背包可做?(反正我没用树形背包打过,边上巨佬打的背包似乎没拿分) 后来发现可以贪心搞,我们先把一个节点所有的儿子都取进去,之后不行的话再从大的开始拿走就好了 问题就变成了了 ...
- 洛谷P3834【模板】可持久化线段树 1(主席树)
题目背景 这是个非常经典的主席树入门题--静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入输 ...
- html--浮动高度塌陷问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- ThinkPHP支持模型的分层
ThinkPHP支持模型的分层 ,除了Model层之外,我们可以项目的需要设计和创建其他的模型层. 大理石平台支架 通常情况下,不同的分层模型仍然是继承系统的\Think\Model类或其子类,所以, ...
- 2-sat——输出方案poj3683
一篇讲的详细的博客 https://blog.csdn.net/Hawo11/article/details/74908233 缩点后为什么要建立反图? 如果是按原图处理,选择一个点之后要把所有其后续 ...
- angular项目中遇到的问题
一.angular项目中如何实现路由缓存 需要实现的效果,对请求的数据进行缓存,比如进入文章详情页之后点击返回,不会再调用后台数据接口:而是加载缓存中的数据,如何数据变动的情况下,可使用下拉刷新刷新页 ...
- Webstorm在MAC下的安装方法
一 .注册时,在打开的License Activation窗口中选择“License server”,在输入框输入下面的网址: http://idea.codebeta.cn (新,感谢Rachels ...
- 字符数组拷贝与strcpy函数
代码: ],str2[]; ;i<;i++) { str1[i]='a'; } strcpy(str2,str1); 让找出错误的地方. 先来看下strcpy函数: 使用格式:char* str ...
- javaweb的几种开发模式
1.MVC模式基础 1.1.MVC模式简介 MVC是一种架构型模式,它本身并不引入新的功能,只是用来指导我们改善应用程序的架构,使得应用的模型和视图相分离,从而达到更好的开发和维护效率.在MVC模式中 ...
- java中自己对页面跳转问题的一些经验
在eclipse中,如果你要在jsp页面跳转到servlet页面中,可以用action=“/根文件名/servlet文件名” 的方式跳转. 例如我创建了一个web application名字是test ...