2011-10-22 136 views
0

這是文件中的一些文本行。我需要使用vi編輯器刪除某些文本塊。在Vi編輯器中替換多行

極光(複數:極光或極光)是高空緯度(北極和南極)地區的天然光線顯示,由高能帶電粒子與高原大氣中的原子碰撞引起(熱大氣層)。

Most aurorae occur in a band known as the auroral zone[2][2] which is typically 3° to 6° in latitudinal extent and at all local times or longitudes. 

The auroral zone is typically 10° to 20° from the magnetic pole defined by the axis of the Earth's magnetic dipole. During a geomagnetic storm, the auroral zone will expand to lower latitudes. The diffuse aurora is a featureless glow in the sky which may not be visible to the naked eye even on a dark night and defines the extent of the auroral zone. 

我有一個類似上面的輸入文件。在這個文件中,我必須刪除某些文本塊的出現,如下所示。

Most aurorae occur in a band known as the auroral zone[2][2] which is typically 3° to 6° in latitudinal extent and at all local times or longitudes. 

所以,我使用下面的命令未工作:

:g/^Most/,/auroral/,/longitudes./d 

我刪除了開頭的行大多數情況下,極光中期和經度底。

+1

刪除這不是可能的東西,你會想使用正則表達式做。因爲你需要平衡大括號的數量,否則你只需要用你發佈的代碼(假設它會在多行上運行)就可以全部使用整個文件中的最後一個大括號。 – OmnipotentEntity

+0

不,你正在混合語法。 A,Bd從A行通過B行刪除(其中A和B可以是行號或正則表達式)。 A,B,Cd應該是一個語法錯誤。 /A.*B.*C/將是一個匹配A的正則表達式,後跟B,後面跟C,同一行中包含任何之間的任何內容。 – tripleee

回答

2

上有什麼可以做不同的限制,但在情況下,你可以使用:

:g/^while/.,/^}/d 

刪除while環路,將while處於行的開始一直到右括號在一條線的開始。


能否請你添加一些更多的這個?

:g/^while/部分搜索從全球搜索以while開頭的行。以下是針對每個匹配行執行的ex命令。該命令爲.,/^}/d,表示從當前行(.)到下一行以大括號開頭(/^}/)做刪除(d)。您可以使用後向搜索或相對運動(?^{?.-3.+10)。

這是很難從註釋的錯位外觀確切說出你的想法(不是你的錯 - 評論不保留有用的格式)

-------------- 
Stack Over Flow 
c**p 
c**p 
c**p 
cool 
c**p 
c**p 
c**p 
------------ 

我需要從更換堆棧溢出流至------------ [...]

說起來很簡單,我沒有看到cool如何有什麼影響:

:g/^Stack Over Flow/.,/^-------/d 

這與我原來的答案是同構的。

+0

請問您可以補充一些。 我的情況就是這樣。 我有一個塊象下面這樣: -------------- 堆棧溢出流 胡扯胡扯胡扯 酷 胡扯胡扯胡扯 ---------- - 我需要從堆棧溢出替換到------------其中涼爽來臨之間的一些如何是這樣的: Stack Over Flow。* cool。* ---- -------- –

1

刪除塊{ ... }而不是搜索和替換會更容易。

你可以去塊(內部或bracked的openening),並與daB

+0

我必須使用正則表達式來執行此操作,因爲該文件非常大,並且特定塊正在文件中的多個位置發生。我不能只是去發生每一件事。 –

+0

使用正則表達式很難做到這一點,因爲代碼中可能存在不平衡的括號。所以更換後的嚴格檢查是不可避免的。 –