Заміна "перший, останній" на "останній, перший"
Якщо у вас, наприклад, є список імен у вигляді:
Фамілія, Ім'я Bond, James Cooper, Garry
і виникло бажання поміняти їх на:
Ім'я Фамілія
Це можна здійснити командою:
:1,$s/\([^,]*\), \(.*$\)/\2 \1/
Двокрапка (:) вказує Vim що це команда типу ex.
Інтервалом рядків для цієї команди буде весь файл, як зазначено показником інтервалу 1,$.
Команда s (substitute) вказує Vim здійснити заміну.
Текст що буде замінено позначено складним регулярним виразом. Обмежувач \( ... \) використовуються для підказки редактору що текст що співпаде з регулярним виразом всередині буде розглядатися як спеціальний (буде привнесено у регістр пам'яті регулярних виразів).
Текст що співпав всередині першого \( ... \) буде позначено як \1 у виразі заміни. Все що співпало з наступним виразом, включеним у \( ... \) відповідатиме \2 виразу заміни, і так далі.
:1,$s/\([^,]*\), \(.*$\)/\2 \1/
У цьому конкретному випадку, першим регулярним виразом (включеним у екрановані дужки) буде набір будь-яких знаків окрім коми. [^,] означає будь-які знаки крім коми, тоді як кількісний показник * вказує на нуль або більше цих знаків.
Наступний вираз у екранованих дужках співпадатиме з усім .* аж до кінця рядка.
В результаті, перше слово рядка буде присвоєне \1 і друге - \2. У виразі заміни ми лише поміняємо їх місцями.
Наступне ілюструє взаємозв'язок між виразами, включеними у \(\) й \1,\2 позначеннями:
:1,$s/\([^,]*\), \(.*$\)/\2 \1/
^^ ^^ ^^ ^^^ ^ ^
|| || || ||| | +----- Текст що співпав із першим \( \)
|| || || ||| |
|| || || ||| +--------- Текст що співпав із другим \( \)
|| || || |||
|| || || ||+----------- Слеш що розділює старий текст і новий
|| || || ||
|| || ++---++------------ Другий \( \)
++-----++--------------------- Перший \( \)
Наступна ілюстрація розбиває на частини різноманітні регулярні вирази, використані у цьому прикладі.
:1,$s/\([^,]*\), \(.*$\)/\2 \1/
^^^^^ ^^ ^^^
||||| || ||+--- Знак кінця рядка
||||| || |+---- 0 або більше разів
||||| || +----- Любий знак
||||| || +++--- Любий знак у любій кількості
||||| || із послідуючим кінцем рядка (EOL)
||||| |+-------- Буквальний знак пробілу
||||| +--------- Буквальна кома
||||+------------ 0 або більше разів
|||+------------- Замикає [] вираз
||+-------------- знаку коми
|+--------------- Співпаданна за винятком
|
+---------------- Вираз списку знаків
++++------------- Співпаде з будь-яким знаком крім коми
+------------ (будь-який знак) 0 або більше разів
+--------- З послідуючою комою