程式設計中的文字對齊問題
阿新 • • 發佈:2019-02-14
問題描述:
在程式設計中,我們經常遇上這樣的問題。在自己的文字編輯器中或者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
縮排,可以這麼想:你的函式內容是不是比函式頭要靠右一點?5.Continuation indent
我們從第一個單詞可以看到continue的影子,所以顯然和繼續,持續有關 這個的意思就是連續縮排的意思,也就是有兩個縮排連在一起,這時候它們的長度設定為多少,預設的就是兩個縮排的長度,這個可以根據喜好和具體需求自己設定6.Indent in lambdas
也就是在lambda表示式中的縮排方式, 關於lambda表示式,請看我的另一篇博文:7.Indent visibility keywords in class/structure
具體說就是 遇到- private
- public
- protected
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日