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