Из каждого пути к файлу в каждой строке извлеките имя файла и добавьте рядом с ним - PullRequest
2 голосов
/ 21 февраля 2020

Учитывая мой текст в файле:

/home/dir1/file1.txt
/home/dir2/file2.txt
...
/home/dirn/filek.txt

Я бы хотел, чтобы это был текст:

/home/dir1/file1.txt file1
/home/dir2/file2.txt file2
...
/home/dirn/filek.txt filek

Могу ли я написать это в vim?

1 Ответ

3 голосов
/ 21 февраля 2020

Это регулярное выражение работает:

:%s#.*/\(.*\)\.txt$#& \1#

Стартовый .*/ пропускает все до последнего шага sh (он жадный, поэтому будет перехватывать всю часть каталога.)

Затем мы фиксируем имя файла в группе с \(.*\).

И, наконец, сопоставляем расширение с \.txt и привязываем его к концу строки.

Для замены мы используйте &, чтобы сохранить полный путь, а затем добавьте \1, чтобы включить только имя файла.

Мы можем использовать # в качестве разделителя, поэтому нам не нужно экранировать / с. У нас есть только один здесь, но это полезный метод для использования, когда пути включены, поэтому я уверен, что я использую его здесь для согласованности.

Возможно, вы захотите взглянуть на :help pattern-searches чтобы узнать больше о регулярных выражениях Vim, которые вы можете использовать для поиска и подстановок.

(В общем, документация Vim великолепна, и система помощи может быть очень полезна, если вы знаете, как с ней обращаться, см. :help helphelp для более.)

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