我想刪除兩列之間所有行的內容。我該怎麼做呢?如何從兩列之間的所有行中刪除文本?
例如,我想這一點:
abcdefg
hijklmn
opqrstu
要成爲這一點,如果我通過去除5列3之間的文本:在d
abfg
himn
optu
我想刪除兩列之間所有行的內容。我該怎麼做呢?如何從兩列之間的所有行中刪除文本?
例如,我想這一點:
abcdefg
hijklmn
opqrstu
要成爲這一點,如果我通過去除5列3之間的文本:在d
abfg
himn
optu
對於自發編輯,我將通過CTRL-V(通常映射到Windows上的CTRL-Q)使用塊式視覺模式,然後d
將其刪除。
如果你經常這樣做,對於一個大範圍/整個緩衝區,或者重複,我會使用一個在虛擬列中開始匹配的替換,並且向上延伸到最後一列,就像你的例子一樣:
%s/\%3v.*\%<7v//
您可以使用搜索和替換:
:%s/..\zs...\ze
或更一般的形式:
:%s/.\{2}\zs.\{3}\ze
其中第一個數字(2)是該列的索引(基於零),第二個數字(3)是該列所具有的字符數。
說明:
:%s/
搜索,並在整個緩衝區替換。
.\{2}\zs
找到兩個字符並在此處設置匹配的開始。
.\{3}\ze
找到三個字符並在此處設置匹配的結束。
由於要刪除匹配,因此省略替換字符串。
HTH
您的解決方案是基於字符的,而不是基於列的。這對於雙寬度(例如中文)字符
@IngoKarkat你是對的。我沒有讀完你的全部答案(我在閱讀CTRL-V後停止了)。 +1爲您的答案。 – Tassos
你提的問題是非常相似的this one。
要刪除的列3至5爲所有行上的文件中:
:%normal 3|d6|
爲了刪除一個特定的線的間隔(80〜90),使用:
:80,90normal 3|d6|
如果您不熟悉普通命令和| | 「運動」有云的簡單說明:
normal
命令在正常模式中執行以下命令;3|
將光標移動到第3列;d
)直到第5列(6|
)。我會做下列方式:
:%s/^..\zs.*\ze..$//g
將在開始刪除一切除了前兩列,兩底。
對於所有行,或只是當前行? – Jeremy
對於所有行,我也想知道第80行到第90行 –
我用一個例子更新了你的問題。你能確定它是準確的嗎?你關心的數字是無關緊要的。 – Jeremy