Я хотел бы добавить - в конце каждого совпадения слов. Но количество добавленных - должно основываться на количестве совпадений, чтобы общее количество символов в этой строке оставалось постоянным.
Как показано в примере ниже, общее количество символов должно быть 6.
например
ab
xyz
abcde
Приведенный выше текст следует заменить на:
ab----
xyz---
abcde-
Вы можете использовать \=
для замены выражения, см. :h sub-replace-expression
.
Когда заменяющая строка начинается с
\=
, остаток интерпретируется как выражение.Функцию
submatch()
можно использовать для получения совпадающего текста. Доступ ко всему совпавшему тексту можно получить с помощьюsubmatch(0)
. Текст соответствует первой паре()
сsubmatch(1)
. Аналогично для дальнейших подматчей в()
.
Таким образом, вы можете добиться этого следующим образом:
:[range]s//\=submatch(0) . repeat('-', 6-strlen(submatch(0)))/
repeat({exp}, {count})
ничего не возвращает, если {count}
меньше или равно нулю, поэтому вы можете упростить это, убрав проверку: :[range]s/.*/\=submatch(0) .. repeat('-', 6 - strlen(submatch(0)))
.
@romainl Спасибо за ваш отзыв. Я пересмотрел ответ, теперь он более краток.
Мне любопытно узнать, есть ли для этого решение notepad++.