Что в мире делает этот vimscript? - PullRequest
2 голосов
/ 15 января 2010

Полный источник здесь: http://www.vim.org/scripts/download_script.php?src_id=10391

Строка:

    silent %s/[^λ←→≲≳≡≠⇒»∙∀\\\-!#$%&*+/<=>?@\^|~.]\@<=\\\([^λ←→≲≳≡≠⇒»∙∀\\\-!#$%&*+/<=>\?@\^|~.]\)/λ\1/eg

Кто-нибудь, пожалуйста, расшифруйте это для меня. Большой скрипт предназначен для юникодирования некоторых операторов в Haskell в более знакомые математические эквиваленты.

Ответы [ 2 ]

6 голосов
/ 16 января 2010

Как автор этой строки, я могу перевести.Сложные регулярные выражения часто доступны только для записи, и это зависит от расширения регулярных выражений vim.

Цель этого состоит в том, чтобы убедиться, что он не выполняет замену \ на довольно напечатанный λ в середине оператора, подобного \\.

Он проверяет, чтобы убедиться, что символ, который предшествует нам в буфере, не является допустимым символом оператора (значение всего, вплоть до \@<=).\@<= - это «просмотр совпадения нулевой ширины», который успешен только в том случае, если материал слева от него происходит, но не включает его в полученное совпадение.

И затем \([^...]\)Часть проверяет, чтобы убедиться, что материал, который следует за нами, также не является символом, и в этом случае мы сопоставляем его, а затем включаем его в вывод благодаря \1 в результате.

Обратите внимание, это не идеально.К сожалению, он все равно заменит обратную косую черту внутри строк, но работает довольно хорошо.

3 голосов
/ 15 января 2010

Полное объяснение строки здесь: http://www.reddit.com/r/haskell/comments/8b0tf/haskell_unicode_cuteness_for_vim/

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