2015-06-23 30 views
2

說發生了,我有一個文件:VIM替換字符串時的變化在另一個地方

Program foo 
<program text> 
End Program foo 

是否有可能,如果我改變在第一線barfoo(這可能不是第一行文件),最後一行的foo也會自動更改爲bar

+0

我忍不住想到(我很喜歡vim),知道源代碼的IDE就是你真正想要的東西 –

+0

True ...但是如果IDE有它,那麼vim中也必須有一種方法.....對於一個文件類型 – BaRud

+0

我所做的一點是,IDE將更加意識到源結構/語法樹等。 Intellij深入瞭解Java語法,vim不是 –

回答

0

我通常會做這樣的事情如下:

  • 將光標移到名稱變更
  • *#(這分別搜索這個詞向前或向後,只有這個詞作爲一個整體,所以在你的例子只有foo事件被發現,沒有foobarmyfoo
  • 改變名稱:caw<new name><ESC>
  • 重複,直到完成:按n跳轉到下一個可能發生,按.重複名稱更改操作,如果需要

你也可以使用一個單一的搜索和替換命令狀:%s/\<foo\>/new_name/gc然後按ynfoo發生,但我個人更喜歡上述方法,因爲它可以節省我輸入foo和從記住把\<\>圍繞它(#/*爲我做這個)。

如果您確定要替換所有出現foobar,您可以從省略c onfirm標誌搜索和替換命令,那麼這將是你想要做什麼的最短途徑我能想到的。

1

你可以使用全局命令和查找和替換,以紀念開始EN面積的停止,應該是取代這樣

:g/^Program foo$/.,/foo$/s//bar 

擊穿

:g     Starts the global command 
/^Program foo$  Search for Program foo where the line starts with Program and ends with foo 
/.,/foo$/    for each mach, expand the rang until the next foo at the end of the line 
s//bar    substitute your last search results with bar 
+0

@Lieven ......謝謝....嘗試它 – BaRud

+0

它的確有它的皺紋。更簡單的版本是'g/^ \ zsProgram foo $ /。,/ Program foo $/s/Program \ zsfoo/bar',但這很難馬上得到解決。 –

0

假設你的光標在程序名上,這可以很容易地完成。

  1. 更改程序名稱:

    ciW 
    foobar<Esc> 
    
  2. 移動到程序結束:

    /End<CR> 
    $ 
    
  3. 重複變化:

    . 
    
相關問題