缩进, Tab 还是空格?(转)
圣战
圣战个毛线
Android 好还是 iOS 好,Windows 好还是 Mac 好,编辑器好还是 IDE好,中划线好还是下划线好…
写代码这么多年,会遇到很多奇葩的毫无意义的所谓脑残粉的争论
昨天 @willerce 同学刚入职就提了个问题: 缩进用 Tab 还是空格的规范貌似没有啊?
大家突然意识到有这个问题…至少证明这不是啥大问题,或者算还没暴露出来的小问题
甚至…因为统一用 IntelliJ IDEA 自动被解决了还蒙在鼓里
随着深入的学习,发现了还是有讲究的…
为什么要用 Tab?
按键次数
所有我看过的学习教程中,形容代码缩进都是说,按一个 Tab 缩进而不是按 4 下空格.语义
Tab 代表”缩进一个level”,而空格有很多含义文件更小
一个 Tab 和一个空格占空间是一样的,4个空格的话就是4倍宽度可调整
常见的就是一个 Tab 等宽于 4 个空格,靠谱编辑器都可以自定义
为什么要用空格?
- 在所有编辑器和系统里
表现都是一致
的,宽度只决定于显示字体 - 可以让作者更
精确控制视觉呈现
有些恶趣味的程序员会画字符画 语义
Tab 是制表符,用 Tab 就和用 Table 布局一样不科学压缩后文件更小
因为空格不可避免,用 Tab 的话要压缩2种字符(脱离实际情况偷换概念)
为什么要混着用?
简单
爷想怎么用就怎么用Tab 党搞不定行末注释对齐
他们是行首缩进用 Tab ,行末注释对齐用空格
到底什么是 Tab?
根据史料 WikiPedia 记载 Tab key 代表了 tabulator key
制表键, 它的出现是因为做表格的时候对齐敲空格需要敲很多下,而且内容变动的时候对齐也比较纠结,干脆弄个 Tab 键按一下跳一列.
HTML 里的 Tab 和空格
不管多少个连续的 Tab 还是空格,在网页呈现的时候都会显示成一个空格,K 数依然是个问题,不过走 Gzip 的话也不是啥问题,因为 Gzip 对重复的东西压缩率特别高.
CSS JavaScript 里的 Tab 和空格
你写过这种整齐的 CSS 么?如果有,那么 Tab 只能解决行首对齐,行末只能靠空格
同时,空格也能解决行首对齐
注释里的 Tab 和空格
你写过注释么…
好吧,那真的要为了好看敲 4N 下么?
基本上靠谱的编辑器都会有这么个设定叫做按一下 Tab 出来4个空格
,配套的还有Shift+Tab干掉4个空格
当然还有格式化为好看的对齐.
Sublime Text 2
这款优秀又轻量的编辑器非常适合性能不好的机器,功能基本上也够用,它的设置方法是
它会很聪明的在行首按 Tab 输入 4 个空格,按 BackSpace
退格键删除4个空格,非行首 Tab 依然 4 个空格,但退格就一个个删
不过它有个问题就是 Shift+Tab 只能光标在行首或者选中行的时候才能生效
IntelliJ IDEA
因为我 SSD 所以跑 IDE 无压力,基本上搞啥都是 IntelliJ IDEA ,必然是要介绍一番.
PS:同样适用于 WebStorm PHPStorm 等 Jetbrains 家一系列 IDE.
首先,他默认就是输入 Tab 出来4个空格
其次,光标定位在任何位置都可以 Shift+tab 反缩进当前行
最后,还记得那个右侧的注释对齐么,咱给你耍一耍
以下动画全部只按Tab,未成年人请勿模仿
前三行先 Tab 出去,第四行按 Tab 会自动用空格对齐
前三行初始位置一致的话推荐按住 alt 左键拖一下进入列编辑模式批量操作
如果第四行先走了,前三行 Tab 调整的时候会参考已有的注释对齐
硬了是为让你爽
最后,附送一个技巧:
如果在 Code Style > CSS 里头设置了 Align value: On conlon,按一下格式化快捷键,一秒变格格.
对 Intellij IDEA 感兴趣的同学附送
IntelliJ IDEA, PHPStrom, WebStorm 前端开发指南.
我选择空格
结论是: 按 Tab ,利用 IDE 自动生成对齐用的空格
作为曾经的 Tab 党,抗住了空格党所谓的好看、语义化、开源项目、Twitter 等大牛都用空格等等非常主观的攻击
败给了对齐
你呢?
原文:http://ooxx.me/tabs-vs-spaces.orz
【补充】
知乎:写代码时,缩进使用 tab 还是空格?
http://www.zhihu.com/question/19960028
英文文章《Smart Tabs》:https://www.emacswiki.org/emacs/SmartTabs
缩进, Tab 还是空格?(转)的更多相关文章
- 缩进与对齐——正确地使用Tab和空格
写代码时大家都会使用缩进(indentation)和对齐(alignment),这是两个相关而又不同的概念,两者都是为了提高代码的可读性.缩进出现在一行的最左边,目的是明显地区分开包含与被包含的代码: ...
- Eclipse设置Tab键缩进4个空格的步骤,也就是按一下Tab键输出四个空格
Eclipse设置Tab键缩进4个空格的步骤,也就是按1下Tab键输出4个空格,步奏如下 1.点击 window->preference-,选择 General->Editors-> ...
- 写码时应该缩进使用 tab 还是空格?
对于程序员来说,其实Tab和空格远远不只是“立场”问题那么简单. 在不同的编辑器里tab的长度可能不一致,所以在一个编辑器里用tab设置缩进后,在其它编辑器里看可能缩进就乱了.空格不会出现这个问题,因 ...
- Sublime 将 Tab 转为空格
最近在使用 vue-cli 搭建项目,但每次用 Hbuilder 编写 vue 文件的时候,如果存在<script>部分就会报错,错误信息大意是说空格有问题.仔细研究了之后才知道,这是因为 ...
- Visual Studio 中 Tab 转换为空格的设置
Visual Studio 中 Tab 转换为空格的设置 在 Visual Studio 中写代码时,按 Tab 键,会自动进行缩进.有时希望实现按 Tab 键,出现多个空格的效果.Visual St ...
- Source Insight 4.0 文件类型、编码格式、tab转空格、tab键自动补全设置。。。
1.编码格式 -- 在 Options->Preferences->Files 中的最下面,Default enconding 为 UTF-8 2.tab转空格 其他相关设置如下: 以下 ...
- vim 将tab转为空格
在vimrc中添加以下选项 set expandtab 会将tab转换为空格,如果要输入一个tab则需要Ctrl-V<Tab>来实现 set tabstop= 会将tab转换为4个空格 使 ...
- sql: 去除数据库表中tab、空格、回车符等特殊字符的解决方法
去除tab.空格.回车符等使用replace语句 按照ASCII码, SELECT char(64) 例如64 对应 @,则select REPLACE('abc@qq.com',char(64),' ...
- vi/vim tab键空格数修改
更改Tap键单位 vi/vim编辑器默认情况下,每按一次Tap相对于8个空格. (1)临时性更改 使用vi打开文件后,输入如下命令: :set tabstop=4 命令释义:更改为相当于四个空格. ( ...
随机推荐
- PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误
有两种方式可以在 PHP 中以异常的方式处理错误: ① PHP 内置的 ErrorException类(也是 Exception 类的子类) <?php function exception_e ...
- Python文件方法
打开文件 使用open函数,语法格式为:open( name[, mode[, buffering]]),name为打开文件名,mode为打开文件方式,buffering控制文件的缓冲. mode可选 ...
- Andrew Ng机器学习公开课笔记 – Factor Analysis
网易公开课,第13,14课 notes,9 本质上因子分析是一种降维算法 参考,http://www.douban.com/note/225942377/,浅谈主成分分析和因子分析 把大量的原始变量, ...
- SMS模型格网转换为MIKE21的格网源代码
program main !sms网格转换成mike21网格 DIMENSION X(),Y(),H(),NDNN(,),ncbd() dimension NBS(),NOBD(,),NSED(,), ...
- Java中只有按值传递,没有按引用传递!
今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java ...
- php 通过exec 创建git分支失败
今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登陆服务器执行却是可以的 新建分支命令如下 git fetch -- ...
- 阻止默认行为stopDefault
function stopDefault(e){ if(e && e.preventDefault) e.preventDefault(); else window.event.ret ...
- 低功耗蓝牙4.0BLE编程-nrf51822开发(9)
Android 4.3以后的系统自动支持蓝牙4.0规范的低功耗蓝牙(BLE).在android4.3之前,蓝牙4.0支持是由手机厂家加入支持的,接口各异,导致开发一个支持蓝牙4.0程序支持市面上的手机 ...
- java JDK8 学习笔记——第11章 线程和并行API
第11章 线程与并行API 11.1 线程 11.1.1 线程 在java中,如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run( ...
- MSChart参考
MSChart在vs2008中使用遇到一个问题,坐标轴的标题为中文时被图表区域遮挡了一部分. 解决办法:在说明文字前加\n实现换一行显示. //this.Chart1.ChartAreas[0].Ax ...