日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

VIM中的搜索和替換

 lilpl 2010-08-26
VIM中的搜索和替換 0/651
標(biāo)簽: VIM 搜索 替換 文本 編輯
VIM是被譽(yù)為非常高效的文本編輯軟件。但是掌握并高效的使用是件有難度的事情。在VIM中進(jìn)行快速的查找和替換是提高VIM使用效率的重要方法。下面是我在閱讀VIM用戶手冊時整理的一些資料:

  1. 行內(nèi)搜索。
    1. f命令可以進(jìn)行行內(nèi)搜索。輸入fx可以找到下一個x字符。
    2. F命令可以在反方向進(jìn)行行內(nèi)搜索,輸入Fx可以找到上一個x字符。
    3. t命令同樣是進(jìn)行行內(nèi)搜索,但是光標(biāo)停留在符合條件的字符的前面。輸入tx使光標(biāo)停留在下一個x字符的前面。
    4. T命令可以在反方向進(jìn)行行內(nèi)搜索,但是光標(biāo)停留在符合條件的字符的下一個字符上。輸入tx使光標(biāo)停留在上一個x的后面的字符上。
    5. %可以搜索與之匹配的對應(yīng)的()[]{}。這個功能對于書寫程序特別有用。
  2. 全文的搜索。鍵入/后,光標(biāo)進(jìn)入VIM底部的命令行,這時就可以輸入以/為開始的/搜索命令了。
    1. 最簡單的查找。輸入/string就可以查找string字符串。
    2. 繼續(xù)查找。在第一次搜索后輸入n將會繼續(xù)進(jìn)行上一次搜索,如果輸入3n那么會找到后面第三個符合的字符串。大寫的N會在反方向,也就是向上進(jìn)行搜索。
    3. 向上搜索。輸入?可以向上搜索。隨后的n命令將會繼續(xù)向上搜索,N向下搜索,其他和/一樣。
    4. 對大小寫的匹配。
      1. 在命令行輸入:set ignorecase可以設(shè)置搜索以忽略大小寫的方式進(jìn)行。輸入:set noignorecase可以設(shè)置搜索以匹配大小寫的方式進(jìn)行。默認(rèn)的,將匹配大小寫。這個默認(rèn)設(shè)置可以在.vimrc中修改。
      2. 大小寫智能匹配模式。輸入命令:set ignorecase smartcase可以設(shè)置為智能大小寫匹配模式。在這種模式下,如果你輸入的字符串中至少包含一個大寫字母,那么就會以大小寫敏感模式進(jìn)行搜索,否則以忽略大小寫模式進(jìn)行搜索。
      3. 在搜索命令中指定大小寫。在幾種大小寫搜索模式中進(jìn)行轉(zhuǎn)換總要輸入長長的一串指令,如果需要不斷地轉(zhuǎn)換模式,確實(shí)有些麻煩。所以你可以直接在搜索命令中指定大小寫匹配模式。\c表示忽略大小寫,而\C表示對大小寫敏感。
    5. 查找當(dāng)前詞。一個簡單的方法可以讓你查找下一個和當(dāng)前詞一樣的詞,你不比輸入/currentword,你可以直接按下*就可以查找下一個currentword。#可以讓你向上查找同一個單詞。
    6. 調(diào)整查找后的光標(biāo)位置。
      1. 使用/string/3會使在光標(biāo)轉(zhuǎn)到找到string字符串的行下面的第3行。第1行從包含string的行算起。同樣可以使用/string/-2來使光標(biāo)停留在包含string的行的前面2行。
      2. 使用/string/e可以使光標(biāo)停留在string字符串的末尾而不是默認(rèn)的第一個字符位置。/string/b則表示停留在string第一個字符的位置,不過默認(rèn)就是如此,我們不比多此一舉。但是/string/b+2卻可以使光標(biāo)停留在string字符串的第二個字符的位置,這里是r。在e或者b的后面+或者-數(shù)字,可以進(jìn)一步調(diào)整光標(biāo)的位置。
    7. 特殊字符。在搜索命令中,  .*[]^%/?~$這10個字符有著特殊意義,所以在使用這些字符的時候要在前面加上一個反斜杠/。而\e表示<esc>;\t表示<tab>;\r表示<cr>;\b表示<bs>。
    8. 匹配換行或空格。使用\n可以表示一個換行;而\s表示匹配空白,注意是空白不是空格。\_s表示匹配換行或者空格;\_a表示匹配換行或者一個字母。比如:/the\nword查找以the結(jié)束并且下一行以word開始的行的位置。/the\_sword查找the和word之間以空白或者換行分割的位置。/the\_s\+word表示the和word之間可以有多個空白。\+的含義可以在后面找到。
    9. 限定詞首或者詞尾。\<可以限定找到是以指定字符串開始的單詞。比如/\<the可以找到以the開始在字符串,但是會忽略在單詞中間包含the的字符串。而\>則是限定必須是以指定字符串結(jié)尾的單詞。
    10. 行首和行尾。輸入/^string查找以string開始的行,并且光標(biāo)停留在這個string的第一個字符。輸入/string$則查找以string結(jié)束的行,并將光標(biāo)停留在這個string的第一個字符。這個模式不會忽略前導(dǎo)或者后置的空格。
    11. 匹配任何一個字符。句號.可以匹配任何一個字符。例如/t.e可以找到the或者tae或者tue。
  3. 更加復(fù)雜的匹配模式。實(shí)際上,/搜索可以使用非常復(fù)雜的匹配模式。下面列出了其中一些復(fù)雜的匹配模式。
    1. 可重復(fù)的字符。
      1. 使用*表示它前面的字符可以重復(fù)多次或者0次。比如/be*可以匹配b,be,bee,beee等等。但是這也會包含b,因?yàn)閑重復(fù)0后是空。如果要匹配諸如be,bebe,bebebe的字符串可以使用\(和\)把他們包括起來,形如:/\(be\)*。
      2. 使用\+來限定為重復(fù)至少一次到無數(shù)次。如:/be\+可以匹配be,bee,bee等等。
      3. 重復(fù)0次或者一次。\=可以指定重復(fù)0次或者一次。/strings\=表示匹配string或者strings。這在查找單詞的復(fù)數(shù)形式特別有用.
      4. 指定重復(fù)的次數(shù)。\{n,m}可以指定重復(fù)n到m次。比如:/be\{2,4}將會匹配bee,beee,beeee。同樣可以使用\{,4}表示匹配0到4次;\{4,}表示4次到無數(shù)次;\{4}表示重復(fù)4次。
    2. 匹配列表中的一個。使用一個以\|分割的列表,可以表示匹配列表中任何一項(xiàng)。比如/one\|two表示查找one或者two;/one\|two\|three表示查找one或者two或者three。
      1. 一個復(fù)雜的實(shí)例:/end\(if\|while\|for\)將會查找endif,endwhile以及endfor。
      2. 字符列表。使用[0-9]可以表示一個0到9范圍的字符。比如/string[1-5]表示查找string1,string2,string3,string4,string5。當(dāng)然也可以使用[a-z]表示字符a到z中間的一個。
      3. 特殊的字符集合。使用\d也可以表示0到9的數(shù)字,這個選項(xiàng)可以代替[0-9]。\D表示非數(shù)字代替[^0-9];\x表示十六進(jìn)制數(shù)代替[0-9a-fA-F];\X表示非十六進(jìn)制數(shù)代替[^0-9a-fA-F];\s表示空白字符代替[ ] (<Tab> 和<Space>);\S表示非空白字符代替[^ ] (除<Tab> 和<Space>之外);\l表示小寫字母代替[a-z];\L表示非小寫字母代替[^a-z];\u表示大寫字母代替[A-Z];\U表示非大寫字母代替[^A-Z]
  4. 搜索并替換。輸入:[range]s/from/to/[flags]命令可以搜索匹配的字符串并且替換為指定的字符串。這是一個稍微復(fù)雜的命令。其中[range]是一個可選項(xiàng),用來指定搜索替換的范圍。[flags]也是一個可選項(xiàng),用來指定搜索替換的處理方式。所以這個命令的簡單形式是:s/from/to/。
    1. 搜索替換的范圍。如果沒有指定范圍,則只在當(dāng)前行進(jìn)行搜索替換。
      1. 在所有行進(jìn)行搜索替換。范圍符號%表示在所有行進(jìn)行搜索替換。:%s/from/to/就是在全文查找from并替換為to。
      2. 在指定的行上進(jìn)行搜索替換。:1,50s/from/to/表示在第1行和第50行之間(包括1和50行)進(jìn)行搜索和替換。:45s/from/to/表示僅僅在第45行進(jìn)行搜索和替換。而"1,$"行號范圍和“%“是等價(jià)的。
    2. 處理方式。我現(xiàn)在使用的VIM默認(rèn)的方式是無須確認(rèn)。不過好像不同版本的默認(rèn)的處理方式是不同的。
      1. 無須確認(rèn)。方式符號g表示直接替換無須進(jìn)行確認(rèn)。:%s/from/to/g表示在全文中查找from并且直接全部替換為to。
      2. 列印。處理方式符號p表示在替換時列出每個被改變的行。手冊中這么說,但是實(shí)際效果卻讓我很迷惑。
      3. 確認(rèn)后處理。處理方式符號c表示在進(jìn)行替換前需要用戶進(jìn)行確認(rèn)。這時你可以選擇(y/n/a/q/1/^E/^Y):y表示同意當(dāng)前替換;n表示不同意當(dāng)前替換;a表示替換當(dāng)前和后面的并且不再確認(rèn);q表示立即結(jié)束替換操作;1表示把當(dāng)前的替換后結(jié)束替換操作;^E向上滾屏^Y向下滾屏,用來幫助查看前后內(nèi)容以決定進(jìn)行操作。
記下來…………

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多