2013-09-11 52 views
0

什麼是採取所有以「定義」,並在使用vi文本文件的末尾粘貼開頭的行的最佳方式結束與X開頭的所有行?將是在文件用vi

舉例來說,如果我有:

定義XXX

一個

定義YYY

b

,我想:

限定XXX

一個

限定YYY

b

限定XXX

限定YYY


解決方案:

  • 在六,g/^define/t$很好地工作。

  • 請參閱以下vim的解決方案。

+0

爲什麼你必須使用'vi'?用其他命令預處理文件不是更容易嗎? – lurker

+0

我正在使用vi來編輯一些代碼。我想給自己添加一條有關代碼將生成的所有文件的評論。如果我已經在vi中了,使用另一個命令似乎很奇怪,但如果這是最好的方法,我會接受它。 –

+2

我幾乎100%確定你沒有使用vi而是vim。如果是這種情況,兩種解決方案都是有效的。儘管如此,我仍然會使用內置命令。 – romainl

回答

1

您可以使用Go<ESC>(哎呀,欠,以及退出鍵)打開該文件的末尾行,然後輸入的字符:

!!grep '^define' %<ENTER> 

,取代當前的行(您剛在文件末尾打開的那個)與該grep命令的輸出(其中%是當前文件)的輸出。 Vi的舊的變體可能沒有這個設施 -

您需要確保該文件,因爲它使用的磁盤上的副本,而不是在內存中的副本,並記住,這是在Vim首先被保存。

+0

爲什麼雙重感嘆號? –

+0

@Dimitriy,第一個等同於':.'(切換到「ex」模式並選擇當前行),第二個意思是用下面的命令的輸出替換選擇。如果你不介意額外的擊鍵,你可以輕鬆地做':。!grep ...'。 – paxdiablo

+0

這對vim很有用! –