2012-02-23 55 views
3

我已經開始研究一個龐大的PHP應用程序,它在每個文件中有數千行代碼,並且在同一個文件中存在很多巨大的塊,類和函數。我不是唯一的開發者,所以我不能重構!VIM:僅尊重當前代碼塊

我試過使用標籤列表插件,但它並沒有真正的幫助。有沒有辦法讓VIM只尊重特定的代碼塊,並忽略文件的其餘部分?我希望對一些或所有這些功能:

  1. 啓用線只對當前的碼塊編號,從1在該行含有所述開口{出發,示出了用於線在它之前或關閉之後沒有編號}
  2. 使用/進行搜索將僅限於所討論的塊。

我正在考慮選擇當前塊並在啓用模式時在新緩衝區中編輯它,然後在退出模式時用已編輯塊替換現有塊。但是,我在實際執行此功能時遇到了麻煩。我目前的版本是這樣的:

map <F7> <Esc>mO<C-V>aBy:new<Return>p:set nu<Return>:set ft=php<Return>ggi<?php<Return><Esc> 
map <F8> <Esc>ggdd<C-V>aBx:bp<Return>`O<C-V>aBp 

但是,這有幾個問題,比如無法執行增量保存。

+1

查看http://stackoverflow.com/questions/2921752/limiting-search-scope-for-code-in-vim – kikuchiyo 2012-02-23 17:03:58

+0

對於功能有限的搜索:http://drchip.0sites.net/astronaut/vim/index .html#FUNCSRCH – 2012-02-23 17:06:56

+0

@kikuchiyo:這對於偶爾的搜索很有幫助,但是在這個區塊裏工作很繁瑣。因此希望爲感興趣的塊設置單獨的緩衝區。 – dotancohen 2012-02-23 17:08:23

回答

2

如果Vim允許您要求的行號,我會感到非常驚訝。

This plugin(以及1或2個類似的IIRC)允許您在視覺上選擇當前文件的一個區域,在另一個緩衝區中對其進行處理,並將所有內容都放回:w的原始文件中。

+0

謝謝,這些插件看起來像他們可能會解決我的需求。 – dotancohen 2012-02-23 21:55:13

1

即使這不是您想要的解決方案,我認爲以下內容可以幫助您解決問題。

您可以使用phpfolding plugin,它通過PHP語法摺疊(函數,類,方法,PHPDoc的...)

然後,您可以通過在關閉的摺疊壓v$選擇倍和執行任何你想要的:whatever 。例如,:s/this/self/g用於替換所有this中的self。當您按:時,vim將自動添加'<,'>來表示以下命令,它僅用於可視化選擇的文本。

+0

謝謝。我已經廣泛使用摺疊。 – dotancohen 2012-02-23 21:55:30