本篇文章介紹 vim 的一些使用技巧:正則表達式
刪除空白行vim
在 vim 中,能夠使用 :%s/^\s\+//
命令刪除行首的全部空白字符。這裏說的 「空白字符」 指的是空格和Tab字符,不包括換行符。對該命令的各個參數具體說明以下:atom
:%s
:s
是替換命令,能夠替換字符串,其基本格式是 :s/from/to/
,把 "from" 字符串替換成 "to" 字符串,能夠用正則表達式來匹配特定模式。該命令默認對光標所在行生效,而 :%s
表示對整個文件都進行替換。^
\s
\+
+
元字符的轉義寫法。例如,a\+
表示匹配 "a", "aa", "aaaaaa" 等等,\s\+
就是匹配一個或多個空白字符,至少要有一個空白字符。/^\s\+//
//
中間內容爲空,即替換後的內容爲空,至關於去掉了行首的全部空白字符。也能夠使用 :%s/^\s*//
命令來刪除行首的全部空白字符,*
表示匹配零個或連續多個跟在它前面的上一個字符。這個命令會匹配到行首沒有空格的狀況,因爲替換後的內容是空,沒有影響。spa
注意:若是寫成 :%s/^\s//
的形式,只會刪除行首的第一個空格,而不能刪除多個空格。 寫成 :%s/^\+\s//
的形式也是隻能刪除行首的第一個空格。code
相似的,能夠用 :%s/\s\+$//
命令來刪除行末的全部空白字符,$
表示匹配行末。也能夠寫成 :%s/\s*$//
的形式。字符串
使用 :help :s
命令查看該命令的幫助說明,部分關鍵內容說明以下:string
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
For each line in [range] replace a match of {pattern} with {string}.
When [range] and [count] are omitted, replace in the current line only.
使用 :help \s
命令查看 \s
的含義以下:it
s whitespace character: <Space> and <Tab>
使用 :help \+
命令查看 \+
的含義以下:class
\+ Matches 1 or more of the preceding atom, as many as possible.
使用 :help /*
命令查看在模式匹配中 *
的含義以下:技巧
* (use \* when 'magic' is not set)
Matches 0 or more of the preceding atom, as many as possible.
空白行指的是看起來沒有內容的行,但實際上可能會有空格、Tab字符,或者行末的換行符。針對下面幾種狀況,須要用不一樣的命令來刪除空白行:
在 vim 中,能夠使用 :%g/^$/d
命令來刪除只有一個換行符的空行。這裏的 ^
表示匹配行首,$
表示匹配行末,在行首和行末之間沒有任何字符,也就是空行。嚴格來講,這裏說的「行末」指的是最後一個換行符前面的一個字符,不包括換行符自身。「空行」 實際上仍是包含有一個換行符。
假設文件中有以下的內容:
abcd efg hijk lmn opqrst
那麼執行 :%g/^$/d
命令後的內容以下:
abcd efg hijk lmn opqrst
能夠看到,中間的空行都被刪除了。
有一些空白行看起來沒有內容,但可能會包含空格、Tab字符等空白字符,這些行用 :%g/^$/d
命令沒法刪除,^$
匹配不到包含空白字符的狀況。
能夠用 :%g/^\s\+$/d
命令來刪除這些空白行,但不刪除只有一個換行符的空行。
這裏的 \s
表示匹配一個空白字符,\+
表示匹配一個或連續多個跟在它前面的上一個字符,\s\+
至少匹配一個空白字符,換行符不屬於空白字符,因此不匹配只有一個換行符的狀況。
能夠使用 :%g/^\s*$/d
命令來同時刪除包含空白字符的空白行和只有一個換行符的空行。
這裏的 *
表示匹配零個或連續多個跟在它前面的上一個字符。對 ^\s*$
模式來講,匹配零個空白字符的狀況,就至關於 ^$
模式,也就是匹配只有一個換行符的空行,因此這個命令能夠刪除只有一個換行符的空行。