歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Vim進階技術:搜索和替換

Vim進階技術:搜索和替換

日期:2017/2/28 15:33:19   编辑:Linux教程

行內搜索

行內搜索,也就是在當前行內進行搜索和移動,通常都與編輯命令一起使用。

  • fx -- 移動到下一個字符x的位置,光標停留在x字符上面
  • tx -- 移動到下一個字符x的位置,光標停留在x前一個字符上
  • Fx -- 移動到前一個字符x的位置,光標停留在x字符上面
  • Tx -- 移動到前一個字符x的位置,光標停留在x後一個字符上
  • ; -- 重復前一個搜索,向著同一方向,即原來向前就向前,原來向後就向後
  • , -- 重復前一個搜索,向著反方向

行內搜索通常與編輯一起使用:

  • dfx/dtx -- 刪除到下一個字符x
  • yfx/ytx -- 復制到下一個字符x

全局搜索

搜索,分為二個部分:一個是搜索命令,另一個是模式匹配;搜索命令就是各個編輯器所支持的啟動搜索的方式,比如Windows的各種編輯器都是以對話框的形式。模式就是在對話框中輸入的要匹配的字串集。本身字串的匹配功能有限,所以就有了專門用於模式匹配的正則表達式,它描述了模式匹配的一些規則,使用這些規則可以讓匹配更加的強大和精准,多數編輯器都支持正則表達式,Vim也不例外,先講一下搜索命令,然後再講對正則表達式的支持。

基本搜索命令

  • /pattern -- 向前搜索pattern,光標停留在第一個匹配的第一個字符上面。向前的意思是向下,或者向著行數增加的方向。Vim會亮顯示所有的匹配,並將光標停留在當前位置的下一個匹配的首字符上
  • / -- 當不提供pattern時,會向前重復搜索上一個pattern,也就是向前重復搜索的意思,光標會跳到下一個匹配上面
  • ?pattern -- 與/pattern類似,只不過它是向後搜索,向著行數減少的方向。
  • ? -- 與/類似,是不過是向後重復搜索
  • n -- 向著同一方向重復搜索,原來向前就繼續向前,原來向後就繼續向後(當向前搜索時與/一樣,當向後搜索時與?一樣)
  • N -- 向著反方向重復搜索,原來向前就向後,原來向後就向前(向前時?一樣,向後時/一樣)
  • * -- 向前搜索光標所在的單詞,只匹配整個單詞,單詞的定義是一串連續的字母,數字,標點,空白都是單詞的分隔符。
  • # -- 向後搜索光標所在的單詞,只匹配整個單詞
  • /?+上下方向鍵 -- 像其他的命令提示符一樣,方向鍵可以方便的引用歷史搜索記錄如,搜索記錄為error, grape, that,那麼按了/後,再按向上方向鍵:/that,再向上:/grape,向下:/that,再次按回車就可以搜索了。

正則表達式

如前提及,模式匹配在搜索當中有重要的作用。正則表達式(Regular Expression)是專門用於描述搜索中的(Pattern)模式的。使用正則表達式來構建pattern可以讓搜索更加強大和精准。有關正則表達式的詳細內容可以參閱《Mastering Regular Expression》這本書。正則表達式僅是一種規范,但是各種常用的工具和編程語言都對正則表達式有不同程度的支持。正則表達式有二類:一是正常的字符,僅匹配自身,如"that",只能匹配"that";另一類就是具有特殊意義的元字符。不像基本字符,元字符具有特殊的含義,如.(句點)可以匹配任意除換行符外的單個字符。正則表達式就是學習各種元字符的使用。

Vim對正則表達式有很好的支持,它的常用元字符有:

通用匹配:

  • . -- 匹配任何除換行符外的單個字符
  • \s -- 匹配一個空白符(space或tab)
  • \S -- 一個非空白符
  • ^ -- 僅匹配行首,也即必須以模式開頭
  • $ -- 僅匹配行尾,也即必須以模式結尾
  • \< -- 匹配詞首,單詞定義為一連串的字母,標點空白和數字均視為分隔符
  • \> -- 匹配詞尾。
  • \<...\> -- 匹配整個單詞(前面命令中的*和#就是用這個來只匹配單詞)。當然\<和\>不必一起使用,可以分開使用

限量符:

  • * -- 前一個字符出現0次或多次,如a*,可以匹配'', 'a', 'aa'或'aaa'等
  • \+ -- 前一個字符出現1次或多次
  • \= -- 前一個字符出現0次或1次
  • \{n,m} -- 前一個字符出現n到m,如a\{3,5},則可以匹配'aaa', 'aaaa'或'aaaaa'
  • \{n} -- 前一個字符出現n次
  • \{n,} -- 前一個字符出現n次到最多次數(32000)
  • \{} -- 0次或多次,與*一致

操作符:

  • \| -- 或,如ab\|ba,則匹配'ab'或'ba'

其他:

  • [...] -- 字符集,表達一組字符的集合,匹配其中任何一個字符

    如[abc],則匹配a或b或c。連續的字符可以用-代替如,[a-c]則匹配a或b或c,[0-9]匹配0到9中任何一個數字,[a-zA-Z]匹配任何一個字母。通常與限量符一起使用,如:/[a-z]\{3,6},長度3到6的小寫字串,/[0-9]\{2,4}長度2到4的數字。

  • \(...\) -- 組合,把內部看成一個整體並保存起來以便後續引用。本身作用不大,要與其他元字符一起使用才能發揮其功效
  • \n -- 其中n=1~9,對組合的引用,也即引用\(...\)中所匹配的內容

    如,/\(that\)\1,則匹配thatthat;/\([a-z]\).\1則匹配,aba, aoa, bcb等。

Copyright © Linux教程網 All Rights Reserved