Рассмотрим следующий файл, бесстыдно похищенный из Изучите Vimscript на нелегком пути .
Topic One
=========
This is some text about topic one.
It has multiple paragraphs.
Topic Three
--------
Hello World
Topic Two
=========
This is some text about topic two. It has only one paragraph.
Предположим, я пытаюсь найти текст над обоими типами заголовков, и я пишуследующее выражение.
:onoremap <buffer> ih :<c-u>execute "normal! ?^\\(==\\+\\|--\\+\\)$\r:nohlsearch\rkvg_"<cr>
Это отображение не работает, по-видимому, потому что выражение \\|
преобразуется в |
.С другой стороны, следующее отображение работает:
:onoremap <buffer> ih :<c-u>execute "normal! ?^\\(==\\+\\\\|--\\+\\)$\r:nohlsearch\rkvg_"<cr>
Это кажется очень противоречивым, поскольку \(
может быть представлен с \\(
в строке, а \+
может быть представлен с \\+
в строке.
Почему \|
требует \\\\|
для представления?
Я пытаюсь найти ментальную модель для причины, поэтому яможет рассуждать о будущих случаях, подобных этому.