在早期的打印機時代,開始新的一行要佔用兩個字符的時間。若是到了一行的結尾處,你要快速回到新的一行的開頭,須要打印針頭在紙面上飛快地掠過,經常會在紙面上留下污點。解決這個問題的辦法就是,用兩個字符:一個字符<Return>來移到第一列,另外一個字符<Line feed>來新增一行。計算機產生之後,存儲較爲昂貴,在如何解決回車換行這個老問題上,人們產生了不一樣的意見。UNIX人認爲在到達一行的結尾時新增一行<Line feed> (LF),而Mac人則認同<Return> (CR)的解決辦法,MS則堅持古老的<Return><Line feed> (CRLF)的方法。這就意味着若是你將一個文件從一個系統轉移到另外一個系統,就面臨着回車換行的問題。而Vim編輯器則會自動的認出這種文件格式方面的區別,並作出相應處理。 正則表達式
fileformats選項,用於處理文件格式問題。如下命令,告訴vim將UNIX文件格式作爲第一選擇,而將MS-DOS的文件格式作爲第二選擇: vim
:set fileformats=unix,dos 編輯器
檢測到的文件格式會被存放在fileformat選項中,咱們能夠用如下命令來查詢: spa
:set fileformat? unix
咱們還能夠利用fileformat選項,來轉換種文件格式。例如,使用如下命令將名爲readme.txt的MS-DOS格式的文件,轉換爲UNIX格式的文件。 orm
:set fileformat=unix ip
在默認狀況下,Vim認爲文件是由行組成的,而且文件最後一行是以<EOL>爲結束符的。若是你想設置文件以<EOL>結束符結尾,則能夠用如下命令: ci
:set endofline it
若是你想設置文件不以<EOL>結束符來結尾,則可使用如下命令: io
:set noendofline
顯示換行
若是你使用如下命令進入<list mode>,那麼就能夠清楚的看到以「$」表示的換行符和以「^I」表示的製表符。
:set list
你可使用如下命令退出<list mode>:
:set nolist
刪除換行
能夠用如下命令刪除換行符:
:%s/\n//g
能夠用如下命令刪除DOS文件中的回車符「^M」:
:%s/\r//g
能夠用如下命令轉換DOS回車符「^M」爲真正的換行符:
:%s/\r/\r/g
能夠用如下命令刪除行尾的空格以及DOS回車符。它沒有使用「/」字符做爲替換命令各個參數間的分隔符,而是使用了「#」字符。命令還使用了「\?」正則表達式,用來匹配它前面出現的字符0次或1次。
:%s#\s*\r\?$##
能夠用如下命令刪除三行空行:
:%s/^\n\{3}//
能夠用如下命令將連續的兩個空行替換成一個空行:
:%s/\n\n/\r/g
自動換行
在默認狀況下,Vim是不會自動換行的,也就是說咱們須要本身決定回車的位置。可是咱們也能夠經過指定textwidth選項,讓Vim自動在指定位置換行。例如,使用如下命令指定在30列時自動換行。因爲在遇到空格時纔會自動換行,因此換行的精確位置可能會小於你指定的列寬。
:set textwidth=29
而如下命令告訴Vim從右面算起當達到10個字符的空格時要換行:
:set wrapmargin=10
在指定了文本寬度的狀況下,當咱們將一行中的前幾個文字刪掉時,Vim並不會將後面行中的文本移動上來,而是造成了一些長短不一的段落,這樣看起來不是很好。能夠有幾種方法處理這個問題:
一種方法是,在可視化模式下選中這些文本,而後用gp命令來格式化選中的段落。另外一種方法是,使用gqmotion命令來完成格式。例如要格式化5行,就能夠用命令:gq4j。這個命令告訴Vim要格式化本行,同時要格式化下面的4行,這樣就達到了格式化5行的目的。若是要格式化整個段落,能夠將光標放在段落的第一行上,而後執行命令gq}。而使用命令gqip能夠格式化當前段落,並且並沒必要要將光標放在段落的第一行上。
若是要想格式化一行,可使用命令gqgq,也能夠簡記爲gqq。
注意:選項textwidth優先於wrapmargin。若是要使wrapmargin選項生效,必須將textwidth設置爲0(這也是默認值)。
合併行
命令J使兩行合併爲一行,同時用空格分隔這兩行。
經過設置joinspace選項,能夠控制合併兩行時的分隔符(若是一行是以標點符號來結尾)。若是設置:set nojoinspaces,用J命令合併兩行時會用一個空格來分隔;若是設置:set joinspaces,用J命令合併兩行時會用兩個空格來分隔。若是不但願用空格來分隔合併的行,可使用gJ命令。
咱們也可使用:join命令,將幾行合併爲一行並使用空格來分隔各行。若是不但願加入空格,那麼可使用:join!命令。
命令小結:set fileformat | 設置文件格式 |
:set endofline | 設置文件結束符 |
:set noendofline | 取消文件結束符 |
:set list | 進入List Mode |
:set nolist | 退出List Mode |
:%s/\n//g | 刪除換行符 |
:set textwidth | 設置行寬 |
:set textwidth | 設置行邊距 |
:join | 合併多行 |
J | 合併兩行 |