VIM:仅限当前代码块

时间:2012-02-23 16:56:46

标签: vim

我已经开始研究一个庞大的PHP应用程序,它在每个文件中都有数千行代码,在同一个文件中存在许多巨大的if块,类和函数。我不是唯一一个开发它的人,所以我无法重构!

我尝试过使用Tags List插件,但实际上并没有帮助。有没有办法让VIM只尊重特定的代码块,并忽略文件的其余部分?我希望能够获得部分或全部这些功能:

  1. 仅对当前代码块启用行号,从包含开头{的行的1开始,并且在其前面或结束}之后的行中不显示编号。
  2. 使用/进行搜索仅限于相关区块。
  3. 我正在考虑选择当前块并在启用模式时在新缓冲区中编辑它,然后在退出模式时用已编辑的块替换现有块。但是,我实际上无法实现此功能。我目前的版本是:

    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
    

    但是,这有几个问题,例如无法执行增量保存。

2 个答案:

答案 0 :(得分:2)

如果Vim允许您要求的行编号,我会非常惊讶。

This plugin(以及1或2个类似的IIRC)允许您直观地选择当前文件的某个区域,在另一个缓冲区中处理它并将所有内容放回原位文件{{1 }}

答案 1 :(得分:1)

即使它不是您想要的解决方案,我认为以下内容可以帮助您解决问题。

您可以使用phpfolding plugin,它通过PHP语法折叠(函数,类,方法,PhpDoc ...)

然后,您可以在关闭的折叠上按v$选择折叠,然后使用:whatever执行任何操作。例如,:s/this/self/g将所有this替换为self。当您按:时,vim会自动添加'<,'>以表示仅对视觉选择的文字执行以下命令。