В моей повседневной работе часто приходится работать с определенной функцией, например с выделением или поиском переменной, но мне никогда не удавалось ограничить область правок / поиска.
Есть ли способ в vim выборочно сказать, найти все ссылки $color
внутри этих наборов фигурных скобок, или в этом сгибе и т. Д. Если это возможно, было бы идеально, чтобы это было относительно универсально, чтобы его можно было применять к редактированию / замене текста.
Например:
$color = "#fff";
function PickColor () {
$color = "#bbb";
$newColors = ["#000", "#fbf", $color];
foreach ($newColors as $c) {
if ($c == "#fff") {
break;
}
}
}
$differentColor = $color;
Однако этот код является довольно плохим примером, если бы мне нужно было заменить все экземпляры $ color, как это сделать в контексте функции PickColor. В качестве другого примера, используя #
и *
Вы можете перейти к следующему экземпляру этого текстового объекта, как бы вы ограничили область поиска только этой функцией (в основном, оборачивая поиск) в противоположность всему файлу, который может охватывать тысячи строк и терять ваше место или неправильно заменяете что-то в другой функции, которой у вас не должно быть?
источник
Если вам удобно выбрать маршрут для плагинов, есть NrrwRgn .
Вы визуально выбираете блок, а затем запускаете
:NR
команду, которая открывает новый буфер (в разбиении) с выделенным текстом. Вы можете вносить изменения в этот буфер, и когда вы сохраняете его, он также сохраняется в исходном файле.На мой взгляд, этот плагин очень хорошо решает проблему, позволяя вам сосредоточиться на операциях, которые вы хотите сделать, не задумываясь о том, как применять их к определенному диапазону.
источник
Вы выбираете интересующий вас блок в режиме визуальной линии (shift + v), а затем вводите
:
и свою команду, которая теперь будет применяться к блоку.Так что если вы хотите заменить в выборе, вы можете запустить
:s/string/replacement_string
источник
VaB:s/\$color/replaced/g
Используйте текстовый объект фигурные скобки '}' и выделите внутри фигурных скобок с помощью 'i}'
на линии с открывающей фигурной скобкой функции:
сначала перейдите к концу строки (которая будет на или внутри открывающей фигурной скобки), затем перейдите к визуальному выделению, затем выберите с помощью текстового объекта фигурных скобок. «i}» находится внутри фигурных скобок «a}» находится вокруг фигурных скобок.
Для языков, в которых отсутствуют фигурные скобки, Vim Text Object: Definitive Guide предлагает несколько плагинов:
ai
включает текущий уровень отступа и строку выше;ii
включает текущий уровень отступа, исключая строку выше.ar
иir
, основываясь на наличииend
ключевого слова.источник