VIM - первая команда из нескольких команд в одной строке игнорируется - PullRequest
2 голосов
/ 25 октября 2019

Я извлекаю информацию из нескольких файлов и написал следующую команду:

:g!/Value/d | %s/.*=//ge | %s/\;//ge | %y

, и это в основном так: 'удаляет строки без "Value" |удалить все до знака = |Удалить ";"|скопировать все в регистр '

, но первый :g!/Value/d игнорируется, кажется, что %y как-то вызывает его игнорирование, поскольку

:g!/Value/d | %s/.*=//ge | %s/\;//ge

правильно очищает документ.

Я также пытался получить журнал выполнения команды, там ничего не помогало.

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

Ответы [ 2 ]

3 голосов
/ 25 октября 2019

Разделитель команд | имеет различный приоритет в зависимости от команды, как объясняет :help :bar. Для команды :global она (и последующие команды) считается частью аргументов самой команды . Это означает, что ваши замены и янки выполняются не один раз (после :global), а фактически в каждой строке, которую :global выбирает !

Вы уже нашли правильный обходной путь: Обернув команду в :execute (которая учитывает разделение команд |) и заключив ее в кавычки, следующие команды оцениваются только после первой команды.

1 голос
/ 25 октября 2019

Итак, я нашел способ обойти это

execute 'g!/\.Value/de' | %s/.*=//ge | %s/\;//ge | %y

Это приведет к ожидаемому поведению, но пока неясно, почему панель не будет работать для команды :g.

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