vim的定位字元和空格符

來源:互聯網
上載者:User

原文轉自【http://my.oschina.net/captaintheron/blog/5157?from=rss】

很苦惱python這個東西是嚴格縮排的,但是我在linux下用vim下的py,預設tab是8個空格那麼長(其實還是一個tab,用set tabstop=4隻是把縮排量給改了,還是一個tab,拿到win下依然不正常。:set softtabstop=4

也是照舊,於是按照“外事不明上GOOGLE,內事不明上BAIDU,房事不明上TIANYA”的原則,google之。發現還可以設定set expandtab,這樣就可以用空格替代tab符,從而保證跨平台時縮排的一致性了。

以下是原文:

'tabstop' 在預設狀態下被設定為 8。儘管你可以改變它,但很快你就會遇到麻煩。其它

的程式不知道你用的定位字元間隔值是多少,你的檔案看起來會一下子改變許多。另外,很

多印表機都將定位字元間隔值固定為 8。所以最好還是保留 'tabstop' 值不變。(如果你編

輯使用其它定位字元間隔值的檔案,請參考 |25.3| 來修正。)

   如果使用 8 個空格來縮排程式,你很快就會走到視窗的最右端;而用 1 個空格又看

不出足夠的差別。因此很多人喜歡用 4 個空格。這的確是個很好的折衷。

   由於一個定位字元 (<Tab>) 是 8 個空格,而你又想使用 4 個空格來縮排,這樣你就無

法使用定位字元來完成縮排。這裡有兩種解決辦法:


1. 混合使用定位字元和空格。由於一個定位字元佔用 8 個空格的位置,你的檔案會含有更少

的位元組數。插入或刪除一個定位字元也要比 8 個空格快很多。


2. 只用空格。這就避免了那些使用不同定位字元間隔值的檔案所帶來的麻煩。


幸運的是,Vim 能夠同時很好地支援這兩種方式。



混 合 使 用 空 格 和 制 表 符


如果你使用定位字元和空格的組合,你直接按正常情況編輯就行。Vim 預設狀態下,能夠很

好地處理這些情況。

   通過設定 'softtabstop' 可以使工作變得更簡便。這個選項能使 <Tab> 看起來像是

被設定為 'softtabstop' 所指定的值,但實際上使用的確是定位字元和空格的組合。

   當你執行下面的命令後,你每次按下 <Tab> 鍵,游標都會移動到下一個 "4 列" 邊

界:

        :set softtabstop=4


當你在第一列按下 <Tab> 鍵後,4 個空格會插入到文本中;再次按下 <Tab> 鍵,Vim 會

先刪除那 4 個空格,然後再插入一個定位字元。Vim 會儘可能地使用定位字元,並輔以空格

填補。

   刪除會以相反的方式進行。<BS> 鍵總是刪除 'softtabstop' 指定的數量。Vim 盡可

能地使用定位字元,而用空格來填補空隙。

   下面的例子顯示了多次輸入定位字元然後使用 <BS> 的情況。"." 代表一個空格而

"------->" 代表定位字元。

        輸入                      結果 

        <Tab>                     ....

        <Tab><Tab>                ------->

        <Tab><Tab><Tab>           ------->....

        <Tab><Tab><Tab><BS>      
------->

        <Tab><Tab><Tab><BS><BS>  
....


另一種方法是使用 'smarttab' 選項。當它被設定,Vim 對每個在縮排行中的定位字元使用

'shiftwidth',而對在第一個非Null 字元後輸入的 <Tab> 使用真的定位字元。但 <BS> 鍵不

會像在 'softtabstop' 選項下那樣工作。



只 用 空 格


如果你不想在檔案中出現定位字元,可以設定 'expandtab' 選項:

        :set expandtab


當這個選項被設定,<Tab>鍵會插入一系列的空格。這樣你可以獲得如同插入一個定位字元

一樣數量的空格。但你的檔案中並不包含真正的定位字元。

退格鍵 (<BS>) 每次只能刪除一個空格。這樣如果你鍵入了一個 <Tab>,你需要鍵入

8 次 <BS> 才能恢複。如果你在調整縮排中,輸入 CTRL-D 會更快些。



制 表 符 與 空 格 的 相 互 轉 換


設定 'expandtab' 選項並不會影響已有的定位字元。如果你想將定位字元轉換為空白格,可以
用 ":retab" 命令。使用下面的命令:

        :set expandtab
        :%retab

Vim 會在所有縮排中使用空格而非定位字元。但是,所有非Null 字元後的定位字元不會受到影

響。如果你想要轉化這些定位字元,需要在命令中加入 !:

        :%retab!


這不大安全。因為它也許會修改字串內的定位字元。要檢查這種情況是否存在,可以執

行:

        /"[^"\t]*\t[^"]*"


這裡建議你不要在字串中直接使用定位字元。請用 "\t" 來替代,麻煩會少些。


將空格轉化為定位字元的命令則恰好相反:

        :set noexpandtab
        :%retab!

 

 

對vim的配置感興趣的朋友可以看下:

http://vcd.gro.clinux.org/doc/usr_toc.html#usr_toc.txt

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.