1. Не важко досягти поведінки за допомогою двоступеневої підстановки:
:,$s/BEFORE/AFTER/gc|1,''-&&
По-перше, команда підстановки виконується для кожного рядка, починаючи з поточного до кінця файлу:
,$s/BEFORE/AFTER/gc
Потім ця :substitute
команда повторюється з тією ж схемою пошуку, рядком заміни та прапорами, використовуючи :&
команду (див. :help :&
):
1,''-&&
Останній, однак, виконує підстановку на діапазоні рядків від першого рядка файла до рядка, де встановлено попередній контекстний знак, мінус один. Оскільки перша :substitute
команда зберігає позицію курсора перед початком фактичної заміни, адреса, на яку звертається, ''
- це рядок, який був поточним перед виконанням команди заміщення. (The ''
адреса відноситься до
'
псевдо-мітці; см :help :range
і :help ''
для деталей.)
Зауважте, що друга команда (після |
роздільника команд — див.
:help :bar
) Не потребує жодних змін при зміні шаблону чи прапорів у першій.
2. Щоб зберегти деякий набір тексту, щоб підняти скелет вищевказаної команди підстановки в командному рядку, можна визначити відображення у звичайному режимі, наприклад:
:noremap <leader>cs :,$s///gc\|1,''-&&<c-b><right><right><right><right>
Кінцева <c-b><right><right><right><right>
частина необхідна для переміщення курсору до початку командного рядка ( <c-b>
), а потім чотирьох символів праворуч ( <right>
× 4), таким чином, розміщуючи його між першими двома знаками нахилу, готовим для того, щоб користувач почав вводити шаблон пошуку. . Після того, як бажаний шаблон і заміна будуть готові, отриману команду можна виконати натисканням
Enter.
(Можна подумати про те, що //
замість ///
відображення вище, якщо ви вважаєте за краще вводити шаблон, а потім введіть розділову косу рису, а потім рядок заміни, а не стрілку праворуч для переміщення курсору над уже наявною роздільною косою косою запасна частина.)
\vpattern
- "дуже магічний" шаблон: не алфавітно-цифрові символи інтерпретуються як спеціальні символи регулярного вираження (не потрібно бігти)