Поиск и удаление до конца строки в VIM - PullRequest
0 голосов
/ 03 апреля 2020

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

I am a #decent
guy

, и я хочу:

I am a guy

Я пытался использовать

:g/#/d

но вся строка удаляется, и я хочу удалить только до конца строки. Какой лучший способ добиться этого в vim?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2020

Это не произойдет, потому что использование этой команды:

:[range]g/pattern/cmd

по умолчанию задает диапазон, представляющий собой целую строку, и вы все равно не делаете подстановку.


Использование:

:%s/#.\+\n//g

.

  • # Соответствует литералу #.
  • .\+\n Соответствует всему до конца и новая строка.
  • // Заменяет весь матч ничем.
0 голосов
/ 05 апреля 2020

Попробуйте вместо этого:

:s/ # .*\n/ /

Объяснение:

Вы использовали неправильную команду, так как они могут выглядеть как новые пользователи.

  • :[range]g/VRE/act Глобальное применение «act» ion (однобуквенная команда) ко всем строкам (в диапазоне, по умолчанию для всех файлов), соответствующих VRE (шаблон)
  • :[range]s/VRE/repl/f Подстановка в строках (в диапазоне, текущей строке по умолчанию) ) соответствующий VRE (шаблон) с аргументом "repl" с использованием необязательных лагов "f"

Теперь о шаблоне, я думаю, этот кандидат покрывает большинство случаев (все, кроме комментариев в начале строки) и комментарии без пробела после знака фунта)

  • # Литеральный пробел, затем тег sh, затем снова пробел
  • .* точка для любого символа, звездочка означает предыдущий может происходить много раз или даже отсутствовать
  • $ доллара в конце, чтобы остаться на "конце строки", но \n, чтобы поймать здесь ENOL
0 голосов
/ 03 апреля 2020

С :global вы бы хотели что-то вроде

:global/#/normal! f#D | join

или

:global/#/substitute/#.*// | join
...