VIM: уважать только текущий блок кода - PullRequest
3 голосов
/ 23 февраля 2012

Я начал работать над огромным приложением PHP, содержащим тысячи строк кода в каждом файле, с множеством огромных блоков if, классов и функций, существующих в одном файле. Я не единственный разработчик, работающий над этим, поэтому я не могу сделать рефакторинг!

Я пытался использовать плагин Tags List, но он не очень помогает. Есть ли способ заставить 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

Однако у этого есть несколько проблем, таких как неспособность выполнить инкрементные сохранения.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Я был бы очень удивлен, если бы Vim позволил тип нумерации строк, который вы запрашиваете.

Этот плагин (и 1 или 2 аналогичных IIRC) позволяет визуально выбирать регионвашего текущего файла, поработайте с ним в другом буфере и поместите все обратно на место в исходном файле на :w.

1 голос
/ 23 февраля 2012

Даже если это не то решение, которое вам нужно, я думаю, что следующее может помочь вам решить вашу проблему.

Вы можете использовать плагин phpfolding , который сворачивается по синтаксису PHP (функции, классы, методы, PhpDoc ...)

Затем можно выбрать сгиб, нажав v$ поверх закрытой сгиба, и выполнить все, что вы хотите, с помощью :whatever. Например, :s/this/self/g для замены всех this на self в сгибе. Когда вы нажимаете :, vim автоматически добавляет '<,'> для обозначения следующей команды, что это только для визуально выделенного текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...