Как я заставляю Vim соответствовать строке, не начинающейся с семизначного числа?

Я не думаю, что это возможно, но в первую очередь почему необходимо сделать это? Если файл неизменен, он не должен фиксироваться.

, Если Вы действительно хотите тот файл, сгруппированный с другими файлами в фиксации, Вы могли бы измениться, что-то незначительное внутри (добавьте пространство, например).

26
задан Jason Down 21 September 2009 в 18:30
поделиться

3 ответа

^\(\d\{7}\)\@!

Это синтаксис регулярных выражений vim для отрицательного просмотра вперед.

Если вы выполняя это как массовую команду : , вы сможете просто выполнить

:v/^\d\{7}/-1j
33
ответ дан 28 November 2019 в 07:06
поделиться

Вот мое решение, использующее 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
1
ответ дан 28 November 2019 в 07:06
поделиться

Регулярное выражение

^\(\d\{7}\)\@!

инвертирует ваше исходное выражение. Для получения дополнительной информации об этом синтаксисе см. Здесь:

:help \@!

Что касается второй проблемы, вы можете, например, заменить завершающую новую строку в предыдущих строках ничем:

:%s/$\n^\(\d\{7}\)\@!//g
7
ответ дан 28 November 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: