1. 程式人生 > >程式設計中的文字對齊問題

程式設計中的文字對齊問題

問題描述:

在程式設計中,我們經常遇上這樣的問題。在自己的文字編輯器中或者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 官方的文件中有這樣的描述:

也就是說,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表示式,請看我的另一篇博文:

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日