Як мені знайти та замінити в межах виділення в vi
?
Як мені знайти та замінити в межах виділення в vi
?
Відповіді:
Виділіть текст у візуальному режимі (я вважаю, це те, що ви робите), потім натисніть, :
щоб почати вводити команду, у командному рядку з’явиться щось подібне:
:'<,'>
Це означає, що команда застосовуватиметься до виділення. Потім введіть s/search/replace/
і натисніть Enter. (Додайте символ g
після третьої риски, якщо ви хочете замінити всі збіги, і знак, c
якщо ви хочете підтвердити кожну заміну)
Більшість інших запропонованих тут рішень працюють по ВСІЙ лінії, в якій відбувається вибір, що може бути не тим, що ви хочете.
Щоб здійснити пошук та заміну ТІЛЬКИ у виділенні, спочатку візуально виділіть текст, а потім скористайтеся командою приблизно такою:
:%s/\%VSEARCH/REPLACE/g
Це зробить пошук та заміну лише у візуально вибраному розділі, замінивши ПОШУК на ЗАМІНИ. Якщо у вас вибрано більше одного рядка, це також буде працювати над кількома рядками.
:%s/\%V /\r/g
без радості. Перший пробіл замінено, але наступні 4 залишаються недоторканими.
\%VSEARCH%V
замість лише\%VSEARCH
Якщо ви вибрали візуальний режим, то:
:'<,'>s/regex/replacement/options
VIM автоматично розмістить діапазон ( '<,'>
), якщо ви перейдете в режим командного рядка (натисканням ':'
) з візуального режиму.
<
починається і де >
закінчується. Можливо, це можливо змусити його працювати з \%'>
атомом .. але мої початкові експерименти провалились.
Додаткова допомога тут Пошук та заміна у візуальному виділенні
Діапазон команд Ex задається лінійно (див. *cmdline-ranges*
), І при :
натисканні, коли відбувається візуальний вибір, діапазон рядків автоматично вказується в командному рядку як '<,'>
(див. *v_:*
), Що змушує :s[ubstitute]
команду працювати на цілі рядки, якщо тільки межі візуального виділення задаються в шаблоні пошуку за допомогою \%V
(див. */\%V*
), наприклад, /\%Vvi\%Vm
відповідає "vim" лише в межах візуального виділення, де кінець виділення вказується безпосередньо перед кінцем шаблону пошуку, оскільки кожен \%V
визначає наступний символ як початку або кінця візуального виділення, і, отже /\%Vvim\%V
, вимагатиме, щоб візуальний вибір продовжувався після 'm', щоб відповідати "vim". Зверніть увагу, що за допомогою другого\%V
у шаблоні пошуку не потрібно, якщо збіг не повинен знаходитись прямо на межі або лише частково у візуальному виділенні.