Почему делает замену новых строк с помощью g/re/p, только относятся к любой строке в Vim?

Вы могли также использовать -path параметр find вместо -name:

find . -path "dir2/*.c"

Это могло позволить Вам находить файлы в dir2 даже если dir2 не был прямой подкаталог, НАПРИМЕР:

# find . -path "*/dir2/*.c"
./dir_a/dir2/file.c
./dir_b/dir2/file.c
4
08.09.2010, 21:47
2 ответа

Для понимания, что продолжается в этом уровне детализации я думаю, что необходимо достигнуть исходного кода. Так, цитирование vim-7.1.314/src/ex_cmds.c (комментарий во главе определения ex_global()):

Это реализовано в двух передачах: сначала мы сканируем файл для шаблона и устанавливаем метку каждой строки это (не) соответствия. во-вторых, мы выполняем команду для каждой строки, которая имеет метку. Это требуется, потому что после удаления строк мы не знаем, где искать следующее соответствие.

Таким образом, если Вы удаляете строку в :g'команда редактора, метка этой строки уходит также. Если Вы создаете строку в :g'команда редактора, это не будет отмечено, таким образом, команда не выполнится на нем. В Вашем примере к строке 3 присоединяются со строкой 2, таким образом, метка на строке 3 исчезает, и следующая метка после того, как строка 2 является той, первоначально ставит строку 4.

Кроме того, ex_global наборы global_busy переменная, которая вызывает несколько команд, включая :s, вести себя немного по-другому. Я не думаю, что различие релевантно здесь все же.

8
27.01.2020, 20:48

Gilles ответил Ваш “почему?”, но я думал, что Вам могло бы быть интересно более простым способом сделать то, что Вы хотели.

Я хочу новые строки после каждого bar.

Вместо того, чтобы заменить оконечный знак строки (таким образом присоединяющийся к строкам и теряющий внутреннюю метку, на ответ Gilles), добавляет пустая строка прямо до конца каждого согласующего отрезка длинной линии. Использовать $ разобраться в соответствии нулевой ширины до конца строки и вставить разрыв строки там (также никакая потребность в /g модификатор начиная с шаблона будет только соответствовать однажды на строку).

:g/bar/s/$/\r/
3
27.01.2020, 20:48

Теги

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