2012-06-22 88 views
2

下面是命令刪除第一N字符在vi:刪除幾個選定的字符從文件在vi/vim編輯器

:%s/^.\{N}//g 

不過,我不明白的^.\{N}意義;誰能解釋每個字符的含義
如何擴展此命令以從行中刪除中間字符?

例如,刪除第四到第50個字符由線

+3

':幫助pattern.txt' – sehe

+0

作爲附錄其他的答案,你可以指定行的範圍在命令的開始。對於整個文件,使用':%s'中的%。例如,要執行第7至47行的替換,可以使用':7,47s',然後使用命令的其餘部分。有關更多信息,請參閱':help:range' – Conner

回答

4

您可以\%c\%v

刪除第四節比賽特定的列到第50列:

:%s/\%4c.\{-}\(\ze\%50c\|$\)// 

僅刪除IFF有一個50列:

:%s/\%4c.\{-}\ze\%50c// 

要使用虛擬列(例如,如果您使用製表位,那麼方便):

:%s/\%4v.\{-}\ze\%50v// 

噢,

  • .\{-}是零個或多個字符的非貪婪匹配。
  • \ze結束比賽指令,這種停止比賽在列50
1

給定範圍這裏是正則表達式的一部分的解釋

^是啓動的最線錨定。

.匹配任何字符。

N指示字符被用來組計數先前的令牌將被匹配

{}的數量。例如,你可以使用它作爲{1, 9}

所以它說,From the beginning of the line, match N characters和其餘的是VIM的東西。

1

^是起始行錨; .是全球比賽,{N}重複前一場比賽N次。

要刪除第4至第50個字符,請使用:%s/^\(.\{4}\).\{46}/\1/g

但是,它可能更容易使用矩形選擇模式:從正常模式,移動到開始位置,然後按Ctrl+V,您可以通過移動光標創建一個矩形選擇。

相關問題