vim 空格和換行的刪除和替換


把一個很長的一行按空格分為多行

:%s/ +/\r/g
簡單解釋一下:
%s :在整個文件范圍查找替換
/ :分隔符
+ :匹配空格,其中“ ”表示空格,+表示重復1次或多次,加在一起表示一個或多個空格。
/r :換行符
/g :全局替換

 


刪除文章中的空行
:g/^s*$/d
簡單解釋一下:
g :全區命令
/ :分隔符
^s*$ :匹配空行,其中^表示行首,s表示空字符,包括空格和制表符,*重復0到n個前面的字符,$表示行尾。連起來就是匹配只有空字符的行,也就是空行。
/d :刪除該行

 


刪除行尾空格:
:%s= *$==
該命令全局查找文本文件的行尾空格並刪除。
解釋:
%s全局查找替換
=為%s命令的分隔符,如果把=換為/,則該命令可以寫為:%s/ *$//
” *$”, $表示行尾,*匹配前面0個到n個字符,*前面是空格,因此此正則表達式匹配行尾的0個到n個字符。
==,分隔符沒有中間沒有內容,表示刪除匹配空格, 在這里表示刪除行尾空格。

 

 

如何快速去掉^M呢,采取以下步驟就行了:
1. vi dosfilename
2. Press Esc 
3. Enter this string: %s/^M//g  (^M = Ctrl v + Ctrl m)
4. Press enter  (the ^M cleared!)
5. :wq! (save the file)

 

 

 

換行方式

在早期的打印機時代,開始新的一行要占用兩個字符的時間。如果到了一行的結尾處,你要快速回到新的一行的開頭,需要打印針頭在紙面上飛快地掠過,常常會在紙面上留下污點。解決這個問題的辦法就是,用兩個字符:一個字符<Return>來移到第一列,另一個字符<Line feed>來新增一行。計算機產生以后,存儲較為昂貴,在如何解決回車換行這個老問題上,人們產生了不同的意見。UNIX人認為在到達一行的結尾時新增一行<Line feed> (LF),而Mac人則認同<Return> (CR)的解決辦法,MS則堅持古老的<Return><Line feed> (CRLF)的方法。這就意味着如果你將一個文件從一個系統轉移到另一個系統,就面臨着回車換行的問題。而Vim編輯器則會自動的認出這種文件格式方面的區別,並做出相應處理。

fileformats選項,用於處理文件格式問題。以下命令,告訴vim將UNIX文件格式做為第一選擇,而將MS-DOS的文件格式做為第二選擇:

:set fileformats=unix,dos

檢測到的文件格式會被存放在fileformat選項中,我們可以用以下命令來查詢:

:set fileformat?

我們還可以利用fileformat選項,來轉換種文件格式。例如,使用以下命令將名為readme.txt的MS-DOS格式的文件,轉換為UNIX格式的文件。

:set fileformat=unix

在默認情況下,Vim認為文件是由行組成的,並且文件最后一行是以<EOL>為結束符的。如果你想設置文件以<EOL>結束符結尾,則可以用以下命令:

:set endofline

如果你想設置文件不以<EOL>結束符來結尾,則可以使用以下命令:

: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 合並兩行

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM