Как же можно получить ВИМ заменить символ в пределах визуального выделения только и не в другом месте на линии? Пример:
- Линия:
int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/};
- Визуальный отбор:
{ 00 01 02 03 04 05 05 /*... lots more like this*/}
- Команда:
:'<,'>s/\ /\,0x/g
- Ожидаемое:
int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/};
Однако после выполнения этих действий фактический результат:
int,0xarr[],0x=,0x{0x00,0x01,0x02,0x03 /* and so on*/};
Есть ли способ изменить приведенную выше команду для получения ожидаемого результата? Не '<
и '>
определить диапазон , на котором поиск (и заменить) команды работают?
substitute
visual-mode
Бхаргав Бхат
источник
источник
:substitute
операторы работают построчно, что объясняет то, что вы видите в своем примере.Ответы:
%V
совпадает внутри визуальной области. См:help %V
.источник
Там
\%V
для этого смотрите:h %V
:Чтобы заменить
foo
толькоbar
в выборе, используйте:В этом конкретном случае:
источник
Если вы хотите заменить внутри визуального блока , вы можете использовать
vis.vim
плагин .http://vim.wikia.com/wiki/Applying_substitutes_to_a_visual_block
Установить:
Загрузите файл vis.vba.gz с http://www.drchip.org/astronaut/vim/index.html#VIS.
После установки:
Когда вы печатаете
:B
, вы увидите этоЭто нормально, просто vim говорит, что команда будет применяться к выбранному в данный момент визуальному блоку.
Более того, вы можете выполнять любую команду Ex для визуального блока, а не только для замены. Например
:B !sort
.источник