亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Linux?CentOS7?vim重復(fù)行問題

 更新時(shí)間:2023年11月08日 14:59:18   作者:qq_36142959  
這篇文章主要介紹了Linux?CentOS7?vim重復(fù)行問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

在用vim編輯處理文件時(shí),會(huì)有重復(fù)行。有的是情境需要,有的可能是誤操作而形成。對于正常形成的重復(fù)行,我們不作討論,我們僅討論什么情況下會(huì)出現(xiàn)重復(fù)行,如何避免,如何處理。

在文件中的單行或多個(gè)連續(xù)空白行,我們不作處理。這可能是格式需要。

一、出現(xiàn)重復(fù)行

1.現(xiàn)象

很多新手容易出現(xiàn)的現(xiàn)象:編輯vim后出現(xiàn)很多重復(fù)行

2.原因

原因也很簡單,vim具有數(shù)字+命令的多次重復(fù)執(zhí)行命令的功能,也就是說,允許數(shù)字+命令的語法格式,表示重復(fù)執(zhí)行命令,其重復(fù)次數(shù)就是命令前的數(shù)字。

如在命令模式下,5yy:從光標(biāo)所在行開始且包括當(dāng)前行,共復(fù)制5行;3dd:從光標(biāo)所在行開始(含當(dāng)前行),共刪除3行;7p:在光標(biāo)所在行后粘貼7次前面復(fù)制的內(nèi)容。

新手是如何操作,才造成的重復(fù)行呢?

新手操作vim最容易犯的錯(cuò)誤就是用vim打開文件就開始錄入內(nèi)容。不顯示內(nèi)容時(shí)就用鼠標(biāo)點(diǎn)點(diǎn)點(diǎn)。

當(dāng)錄入某些數(shù)字后,發(fā)現(xiàn)沒有模式切換,就又按了i/I,或按了a/A。在編輯模式下,錄入一些內(nèi)容后,按Esc鍵返回命令模式。這時(shí)就會(huì)出現(xiàn)重復(fù)的多行內(nèi)容(就是前面錄入的內(nèi)容)。

3.案例

我們對此過程進(jìn)行模擬操作,重現(xiàn)此類現(xiàn)象。

a.打開文件

我們先準(zhǔn)備一個(gè)文本文件test.txt:

b.錄入數(shù)字

用vim test.txt打開文件,(在命令模式下)直接錄入數(shù)字123(可以是小鍵盤錄入,也可以是主鍵盤上的123,不影響后續(xù)結(jié)果)。

c.切換模式

再按i鍵,進(jìn)入編輯模式

d.錄入內(nèi)容

移動(dòng)光標(biāo),在abcde行下錄入ABCD,按回車

e.退出

按Esc,退出編輯模式,vim的文本內(nèi)容將出現(xiàn)如下效果:

文件中的其他部分內(nèi)容不變!錄入的內(nèi)容本來希望一行“ABCD”,現(xiàn)在出現(xiàn)很多行(123行)。

二、避免重復(fù)行

1.知道原因

了解vim模式的使用,在不同模式下操作不同的命令或內(nèi)容。

如果因操作不當(dāng),產(chǎn)生了重復(fù)行,可以返回到命令模式下,按u取消原來的操作。

2.操作注意

不在命令模式下錄入數(shù)字,或錄入數(shù)字后及時(shí)按Esc,取消剛才的操作。

如確實(shí)需要部分內(nèi)容重復(fù),可以按此方法,產(chǎn)生需要的重復(fù)行。

三、刪除重復(fù)行

刪除重復(fù)行的操作十分普遍。

如果找不到產(chǎn)生重復(fù)行的原因,或拷貝內(nèi)容時(shí)產(chǎn)生了多余的重復(fù)行,將如何刪除重復(fù)行呢?

vim刪除重復(fù)行方法很多,原理基本相同:先排序,再應(yīng)用正則表達(dá)式查找相同行,并刪除(特定條件下,不排序,直接去除重復(fù)行)。

在后續(xù)的討論中,我們需要一些重復(fù)行,將按前述介紹操作產(chǎn)生重復(fù)行。

1.sort u

sort命令應(yīng)用比較多,具有排序功能。u是uniq去除重復(fù)命令的簡寫。

: sort u

命令執(zhí)行后效果:

此命令也可以再簡化為sor[t] u,執(zhí)行時(shí)可以不寫t。

2.%!uniq

在前面刪除重復(fù)行操作后,可以在命令模式下,按u,返回到有重復(fù)行狀態(tài)。

錄入命令:

: %!uniq

效果如前,去除了重復(fù)行,僅保留一行內(nèi)容。

3.w !uniq > %

再次按下u,返回到有重復(fù)行狀態(tài)。

執(zhí)行命令(底行模式下):

: w !uniq > %

執(zhí)行命令后,有兩項(xiàng)選擇,如下:

選擇 O,確認(rèn)后,仍需按確認(rèn)鍵繼續(xù)。

返回原來狀態(tài)。

選擇 L,確認(rèn)后,仍需按確認(rèn)鍵繼續(xù),最終是刪除重復(fù)行:

4. sor ur /^/

再次按下u,返回到有重復(fù)行狀態(tài)。

執(zhí)行命令(底行模式下):

: sor ur /^/

效果與前面基本一致。最大的不同,是在去除重復(fù)行的同時(shí),不打亂原來文件內(nèi)容。

在前面的命令中,不加/^/時(shí),也可以排序、去重。但加上/^/將僅去重,不進(jìn)行打亂文件內(nèi)容而排序。

如把命令修改為sor u /^/,結(jié)果也將是排序、去重。

5.g/^\(.\+\)$\n\1/d

再次按下u,返回到有重復(fù)行狀態(tài)。

執(zhí)行命令(底行模式下):

: g/^\(.\+\)$\n\1/d

命令解釋

在命令g/^\(.\+\)$\n\1/d中:

  • g全局
  • ^行首
  • .\+此處有1到多個(gè)任意字符
  • \(\)用括號(hào)包起來形成第一個(gè)分組
  • $行尾
  • \n換行
  • \1反向引用第一個(gè)分組
  • /d刪除

本案例中,沒有執(zhí)行排序命令,直接執(zhí)行去重命令:

下面使用替換來刪除所有重復(fù)行(僅保留第一行,同時(shí)刪除后面的重復(fù)行)。這是該g//d方法的一種變體。

: %s/^\(.*\)\(\n\1\)\+$/\1/

去除重復(fù)行,僅保留一行!

: %s/\v^(.*)(\n\1)+$/\1/

去除重復(fù)行,僅保留一行!

: %s/\(.\+\)$\n\1/\1/g

不能一次去除重復(fù)行,可以多次執(zhí)行,最后只保留一行。

另外還有一些別的命令,也可以試一試:

  • :g/\%(^\1$\n\)\@<=\(.*\)$/d     //功能同上,也是去除重復(fù)行
  • :g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d  //功能同上,也是去除重復(fù)行

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論