VIM: цикл через строку - PullRequest
       3

VIM: цикл через строку

1 голос
/ 22 апреля 2011

Я пытаюсь изменить в URL весь текст длиннее 6 символов на 6 символов ~ 1 pe

c: \ program files \ vim directory \ vim73 \ на
c: \ progra ~ 1\ vimdir ~ 1 \ vim73

Я нашел способ найти длину строки между "\ \"
strlen (matchstr ("c: \ program files \ vim directory \ vim73 \", "\\\ zs. * \ ze \\ "))

но как я могу перебрать строку?

Как я могу сократить ее до 6 символов (удаляя пробелы, если они есть) ипоставить "~ 1" за этим?

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

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

:s# ##ge|s#\v\\\zs(\w{6}).{-}\ze\\#\1\~1#&

Edit: только что заметил, что это оставляет косую черту.Если вы хотите, чтобы это тоже было удалено, вы можете использовать следующее:

:s# ##ge|s#\v\\\zs(\w{6}).{-}\ze\\#\1\~1#&|s#\\$##&
1 голос
/ 22 апреля 2011

Я думаю, что это регулярное выражение должно сработать:

:%s /\\\([^\\]\{6\}\)[^\\]*/\\\1\~1\\/g

По сути это означает: сопоставить первые 6 символов между двумя вхождениями \ или одним вхождением \ и символом новой строки. Запомните эти символы (для запоминания используется \( ... \)) и сопоставьте все остальное до разделителя (перевод строки или \). Замените это на первые 6 символов и ~1.

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