Почему мой не жадный матч не работает в vim? - PullRequest
0 голосов
/ 06 сентября 2018
This  is  test

В этой строке две вкладки (\ t). Я хочу избавиться от детали от начала до первой клавиши табуляции, которая называется «Это», и я использовал следующий шаблон:

:s/.\{-}\t//g

Он говорит, что не может найти шаблон. Если я использую следующее, обе вкладки заменяются, а это не то, что я хочу. Почему не работает первый шаблон?

:s/.*\t//g

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Ваш шаблон /.\{-}\t не работает из-за флага g в команде :s. Этот флаг включает глобальное сопоставление, поэтому оно совпадает дважды. Просто уберите флаг, и он будет работать. Кроме того, при удалении чего-либо вы можете пропустить replace part в :s:

:s/.\{-}\t

Полный :s/.\{-}\t// тоже хорошо. Обратите внимание, что в любом случае не должно быть «шаблон не найден», как вы описали. Если вы видите это сообщение, между вашим примером и вашим реальным текстом есть что-то другое.

0 голосов
/ 06 сентября 2018

Ваша первая попытка не работает, потому что вы соответствуете наименьшему числу любого символа, за которым следует вкладка. Наименьшее число любого символа - ноль (0). Таким образом, обе ваши вкладки совпадают без каких-либо других символов.

На основании комментариев приведенное выше объяснение было неверным.

Вот одно из возможных решений.

:s/^[^\t]*\t//

Это происходит с начала ^, захватывая любое количество символов без табуляции [^\t]*, пока не достигнет табуляции \t.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...