Я не думаю, что это возможно, но в первую очередь почему необходимо сделать это? Если файл неизменен, он не должен фиксироваться.
, Если Вы действительно хотите тот файл, сгруппированный с другими файлами в фиксации, Вы могли бы измениться, что-то незначительное внутри (добавьте пространство, например).
^\(\d\{7}\)\@!
Это синтаксис регулярных выражений vim для отрицательного просмотра вперед.
Если вы выполняя это как массовую команду :
, вы сможете просто выполнить
:v/^\d\{7}/-1j
Вот мое решение, использующее awk, которое можно вызывать внутри vim:
$ cat seven.awk
# Script to join lines that does not start with 7 digits
/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9]/ { print; next }
{ printf $0; getline; print }
$ cat seven.txt
123
4579 bad
7654321 This line is OK
1234567 OK So is this
111
2222 bad again
4443333 OK again
$ awk -f seven.awk seven.txt
1234579 bad
7654321 This line is OK
1234567 OK So is this
1112222 bad again
4443333 OK again
Прошу прощения за мое неуклюжее выражение: моя awk устарела и не понимает причудливых выражений вроде: \ d {7 }. Если вы хотите вызвать эту команду изнутри vim для всего файла:
:%!awk -f seven.awk
Регулярное выражение
^\(\d\{7}\)\@!
инвертирует ваше исходное выражение. Для получения дополнительной информации об этом синтаксисе см. Здесь:
:help \@!
Что касается второй проблемы, вы можете, например, заменить завершающую новую строку в предыдущих строках ничем:
:%s/$\n^\(\d\{7}\)\@!//g