Регулярное выражение работает в vim, но не работает в ex-режиме vim - PullRequest
0 голосов
/ 04 июня 2018

Я использую ex-режим vim в скрипте для выполнения регулярных выражений vim и подстановки текстовых файлов.

ex $NAME <<EOEX
    :%s/<.\{-}>//g
    :%s/\[.\{-}\]//g
    :%s/&#160;/ /g
    :%s/^Contents$
    :%s/^\d.*$
    :%s/ (.\{1,4\})//g
    :g/^$\n^$/d
    :x
EOEX

У меня были проблемы с регулярным выражением :%s/ ([^)]\{-}[^\d0-\d1000].\{-})//g (не показано).Я использую его, чтобы отфильтровать наборы скобок и их содержимое, когда в нем находится символ со значением больше 1000.Это выражение удаляло бы все наборы скобок и содержимое, когда они помещались в команды ex, указанные выше, поэтому мне пришлось назвать его следующим образом:

vim $NAME -c ':%s/ ([^)]\{-}[^\d0-\d1000].\{-})//g' -c ':wq'

, который работает нормально.Кто-нибудь понимает, почему он работает, когда ему передается vim с параметром -c, а не как команда в режиме ex?

(Дополнительный вопрос: что означает синтаксис << 'EOEX ...EOEX '</em> делать? Я не могу найти для него никакой документации. РЕДАКТИРОВАТЬ: Насколько я понимаю, использование <<' EOEX ... EOEX '</em>это Здесь документ и EOEX переносит строковый литерал, который передается команде ex $ NAME. Насколько мне кажется, имя идентифицированной упаковки (в моем случае EOEX) является произвольным)

...