Як замінити лише в межах візуального вибору?


27

Як же можна отримати ВІМ замінити символ в межах візуального виділення тільки і не в іншому місці на лінії? Приклад:

  • Рядок: 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*/};

Чи є спосіб змінити команду вище, щоб отримати очікуваний результат? Чи не '<та '>визначити діапазон , на якому пошук (і замінити) команди працюють?


2
Я не знаю відповіді, але я знаю, що :substituteоператори по черзі, що пояснює, що ви бачите у своєму прикладі.
Карл Інгве Лервег

Відповіді:


32
:'<,'>s/\%V\ /\,0x/g

%Vзбігається всередині зорової зони. Див :help %V.


1
Слід зазначити, що це рішення лише підтверджує, що початок матчу знаходиться всередині візуального вибору .
Крістіан Брабандт

7

Для \%Vцього дивіться :h %V:

\% V

Збіг всередині зони Visual. Коли режим візуалізації вже припинено, збігаються в області, що gv буде переобрано. Це збіг / нульова ширина. Щоб переконатися, що весь візерунок знаходиться у зоні Visual, покладіть його на початок та кінець шаблону , наприклад:> /\%Vfoo.*bar\%V

Для заміни fooлише barу виборі використовуйте:

:'<,'>s/\%Vfoo\%V/bar/
:'<,'>s/\%Vfoo\%V/bar/g
:'<,'>s/\%Vfoo\%V/bar/cg

У цьому конкретному випадку:

:'<,'>s/\%V\ \%V/\,0x/g

4

Якщо ви хочете замінити візуальний блок , ви можете використовувати 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

# Open vis.vba.gz in Vim 7.1 or later.
vim vis.vba.gz

# Source the open file.
:so %

# Quit Vim
:q

Після встановлення:

ctrl-v to enter visual-block mode
Move to select the block you want
:B s/pattern/newtext/

Коли ви введете :B, ви побачите це

:'<,'>B 

Це добре, просто vim говорить, що команда застосовуватиметься до обраного на даний момент візуального блоку.

Ще краще, ви можете виконувати будь-яку команду Ex у візуальному блоці, а не лише заміну. Наприклад :B !sort.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.