1. 使用Vim提取文本內(nèi)容
考慮以下場(chǎng)景:Vim教程網(wǎng)為了增加在百度上的收錄量,需要調(diào)用百度站長(zhǎng)平臺(tái)提供的主動(dòng)推送接口實(shí)時(shí)推送鏈接。為此,需要將準(zhǔn)備提交的鏈接按照每行一條的格式寫入一個(gè)文本文件中。

而Vim教程網(wǎng)是有提供https://vimjc.com/sitemap.xml文件的,里面包含了教程網(wǎng)上所有的Vim教程文章,因此,只需要對(duì)sitemap.xml文件進(jìn)行必要的處理,提取出所有文章的url即可。
為了提取出sitemap.xml中的所有文章url,可以使用Vim進(jìn)行如下操作。
- 首先,在Vim命令行模式下使用命令
:v/loc/d刪除掉sitemap.xml文件中不包含 loc 的行 - 其次,使用Vim搜索命令
/\v *\<\/?\w+\>選中<loc>或</loc>標(biāo)記 - 最后,使用Vim替換命令
:%s///g刪除選中的loc標(biāo)記和空格

:v/loc/d 命令是使用 :vglobal 命令的縮寫形式執(zhí)行與 :global 命令完全相反的操作,用于實(shí)現(xiàn)刪除所有不包含 loc 的行,更多內(nèi)容可以參考文章Vim global命令和重復(fù)操作。
/\v *\<\/?\w+\> 用Vim的very magic正則匹配模式依次匹配零個(gè)或任意個(gè)空格、再匹配左尖括號(hào) (<)、匹配可選的正斜杠 (/?)、匹配一個(gè)或多個(gè)單詞型字符 (\w+)、匹配右尖括號(hào) (>)。從而搜索出所有包含尖括號(hào)的目標(biāo)字符。
:%s///g 命令是使用Vim的替換命令 :s (全稱為 :substitute) 將源字符串串替換為目標(biāo)串(空格),由于substitute命令沒有顯式指定源串,所以substitute命令會(huì)沿用上次的查找模式 (即/\v *\<\/?\w+\>),更多內(nèi)容可以參考文章substitute重用上次的查找模式
2. 將 CSS 文件中所有規(guī)則的屬性按字母排序
假設(shè)我們想把某個(gè)CSS文件中每一組樣式規(guī)則內(nèi)的屬性都按照字母順序排序??梢越柚?Vim 的內(nèi)置命令 :sort 配合 :global 命令實(shí)現(xiàn)這一功能。

:g/{/ .+1,/}/-1 sort 命令是使用 :global 命令在指定的文件范圍內(nèi)執(zhí)行 sort 命令。為了分析這個(gè)Vim命令的含義,將其拆分成以下幾個(gè)部分。
.+1,/}/-1 的基本形式為 .,/}/,其含義是 從當(dāng)前行開始,直到匹配到模式 /}/ 的那一行為止。偏移值 +1 與 —1 用于縮小操作范圍,把操作對(duì)象集中在 {} 之間的內(nèi)容上面。
/{/ 命令令會(huì)將光標(biāo)置于某個(gè) {} 塊的起始位置。
所以,參考Vim global命令格式可分析出,:g/{/ .+1,/}/-1 sort 命令指定的模式 { 會(huì)匹配每個(gè) {} 塊的起始行。而對(duì)于每個(gè)匹配行,:sort 會(huì)從匹配行到 {} 塊的結(jié)尾這個(gè)范圍內(nèi)執(zhí)行。
最終,每一條規(guī)則的 CSS 屬性都會(huì)按照字母順序排列整齊。
原文鏈接:使用Vim處理文本-Vim使用技巧(9)