您的位置:首页 > 编程语言

编程中的文本对齐问题

2015-01-29 10:59 197 查看

问题描述:

在编程中,我们经常遇上这样的问题。在自己的文本编辑器中或者IDE中,明明文本是对齐的,但是一旦复制粘贴到其他的地方,就会莫名其妙不在对齐,很影响美观。对于我这种有代码洁癖的人来说,简直难以忍受啊,有木有?

就像这样:

在我的IDE中,明明是对齐的!!!






可是,我把代码上传到github上,显示出来的就这样了,啊啊啊啊~






这让我如何能够忍受!!!

=======================================================================

于是,焦躁的我开始探究起来。

首先我考虑是不是一个Tab或Indent所对应的空格个数不一致所导致的?

(Tab就是制表符,键盘上最左边那列中的一个键上有写tab的,相信大家在编程对齐文本时候经常用,Indent就是指缩进)

我打开我的IDE设置,Editor(编辑器)里面的 Code Style(代码风格)里面,我找到了相关设置:






首先我们了解下编辑器在处理Tab和Indent时的几个参数(不同IDE/文本编辑器的设置大体上都是一样的):

首先是第一个:

1.Use tab character

这个的意思是使用tab 字符,而不是用空格来填充tab,如果勾选,效果是这样(没有勾选的就像上一张图tab被4个空格替代):






这是什么意思呢?也就是说如果我敲了一下键盘上的tab键,如果勾选了这个选项,那么编辑器会插入一个tab字符,如果没有,编辑器就会使用相应个数的空格来代替tab字符



所谓的

2.smart tabs

在vim 官方的文档中有这样的描述:

Smart Tabs : Use tabs for indent, spaces for alignment

也就是说,tabs用来缩进,空格用来对齐,具体是这样的效果:






也就是说,这一块空,到底是用tab字符还是空格代替,取决于空的作用是用来缩进还是用来对齐,如果用来缩进,那就用tab,如果是用来对齐,那就用空格。

再来说下一个:

3.Tab size

这个很好理解,也就是键盘上按下一个tab,文本编辑器所给的长度(单位是 “个空格的长度”)

有两个地方会体现它的作用:

一个是按下tab键时起作用
一个是显示tab字符时起作用 ( 比如说, \t ? 0.0 )

4.Indent

缩进,可以这么想:你的函数内容是不是比函数头要靠右一点?
又或者是写html时候,标签套标签,里层标签是不是要往右去一段空白?
还有,写文章的时候,段首空出两个字?

这些都是缩进的具体表现,为了使文本更加美观~

所以理解了缩进的概念,Indent也就无需我多说了。

5.Continuation indent

我们从第一个单词可以看到continue的影子,所以显然和继续,持续有关

这个的意思就是连续缩进的意思,也就是有两个缩进连在一起,这时候它们的长度设置为多少,默认的就是两个缩进的长度,这个可以根据喜好和具体需求自己设定

6.Indent in lambdas

也就是在lambda表达式中的缩进方式,
关于lambda表达式,请看我的另一篇博文:
Lambda
表达式语法



7.Indent visibility keywords in class/structure

具体说就是 遇到

private
public
protected

时,缩进大小。

通常设置为0,也就是不缩进。

8.Indent members of namespace

对于命名空间成员的缩进。

比如,在c++中 , 总会在最前面加上using namespace std;
否则,你需要在每个需要使用命名空间std的前面都要加上 “std::”

好了,基本上有关于tabs indents 设置就这些了。下面我接着说我解决问题的过程。

我对设置修改后,发现无论怎么修改,都无法在IDE对齐的情况下使文本在github上也对齐。
这我就纳闷了,于是我试github上的tab size是多少,就像这样:






不过我当时没有勾选Use tab character,所以我可以一点点移动光标来数出空格数,发现也是4个空格对应一个tab

这我就纳闷了,看来tabs 和 indents 的设置不是导致错位的关键所在。

好吧,你肯定觉得我很扯,说了这么多是废话?
非也,至少弄清楚这个也很有意思嘛 = =
======================================================
于是我就考虑到我的字体设置上来了。
首先给大家介绍什么是

等宽字体:

我们在word中编辑英文或者数字的时候,两行字,字母/数字的个数是一样的,但是长度却不一样!!

就像这样:




同样是10个字符,长度却不一样,因为选用的不是等宽字体(monospaced font),一般编辑器和IDE设置字体的地方可能会出现,像 Clion中(大爱JetBrains各种IDE有木有?)





Show only monospaced fonts,就是在下面的Primary font(主字体)中只显示等宽字体。

当时,我想到字体,可是我明明记得我用的 Monaco(Apple公司的)就是等宽字体啊,可是我突然又想到,不对,我用的是

Monaco+Yahei.tff

这是一个英文显示为Monaco,中文显示为微软雅黑的字体。想到这儿,我就明白问题出在哪了。

显然这个混合字体并不是等宽的,该死,当时觉得省事,这个比较方面。

于是最终我使用的上图的字体方案:
当Primary font 不能使用时(遇到了中文字符),那么就会使用secondary font,微软雅黑,这样的组合就没问题了。

我修改好文本对齐,然后放到github上果然没问题了。

这也说明了一点,github上使用的英文字体也是等宽字体啊!
这是github上font-family的设置:(果然!)





consolas就是一个等宽字体~

至此,终于解决并弄懂了文本对齐的问题了~

=========================
silverHugh
2015年1月29日
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: