Много программистов, которых я знаю, является очень быстрыми учениками и имеет врожденную ловкость для определения несоответствий, альтернатив и упрощений.
Вы могли бы приложить все усилия к , учат его Вашему домену: если у Вас самих была хорошая интуиция о том, какие потребности быть созданным, он выяснит то же самое, и затем можно обсудить детали.
Вполне возможно, при приобретении знаний о Вашем домене он предложит более простое или радикально различное решение в более высоком уровне, который заставляет Вашу первую проблему уйти, или существующий инструмент, который можно легко поместить в использование.
, При попытке определить проект создать нагретые рули, час, говорящий с хорошим программистом, приведет его предлагать перчатки.
я имел, это происходит со мной: клиент был готов заплатить мне для создания чего-то, и после 20-минутного чата я указал на них на существующий инструмент с открытым исходным кодом, который решил их проблему в общем случае. У них просто не было знания или мышления для анализа их проблемы до той степени.
наиболее важный момент во всем этом - то, что это диалоговое окно : необходимо поделиться знаниями с разработчиком, и вместе работать для решения. Бросок резюме дизайна и спецификации по стене недостаточно, потому что Вы не усиливаете их способности предназначаться для проблемы.
Глядя на ваш конкретный пример, возможно, самый простой способ сделать это (поскольку \ V здесь не поможет) - использовать ?
вместо /
: тогда вам не придется выходить из /
s:
?((N/N)/(N/N))/N
Это будет искать в обратном направлении, а не вперед, но вы всегда можете использовать «N» вместо «n» для поиска вперед после первым делом. Или вы можете нажать /
, а затем клавишу курсора вверх, чтобы автоматически избежать косой черты.
Однако вы ничего не можете сделать с экранированием обратной косой черты. Думаю, вы могли бы сделать:
:let @/ = escape(pattern, '\')
, а затем использовать n
для поиска, но это, вероятно, не намного проще. Лучшее, что я могу придумать, это:
:command! -nargs=1 S let @/ = escape('<args>', '\')
Затем выполните:
:S (N)/(N+1)\(N)
n
Может быть что-то вроде этого:
nmap <Leader>s :execute '/\V' . escape(input('/'), '\\/')<CR>
Он выдаст вам запрос /
и будет вести себя как встроенный поиск, но не будет выполнять поиск- as-you-type или другие подобные вкусности.
В зависимости от конкретной строки, которую вы ищете, префикс \ V
, вероятно, поможет.
См. : help \ V
:
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
* * \* \* any number of the previous atom
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'
Итак, если у меня есть строка hello. * $ World
, я могу использовать команду / \ V. * $
чтобы найти только . * $
- единственная часть строки , которая должна экранировать, - это еще одна обратная косая черта, но вы все равно можете выполнять группировку и т. д., экранируя специальный символ.
:g #\V((N/N)/(N/N))/N#
Команда : g
- это глобальный поиск, с учетом того, что:
:[range]g[lobal]/{pattern}/[cmd]
Execute the Ex command [cmd] (default ":p") on the
lines within [range] where {pattern} matches.
Instead of the '/' which surrounds the {pattern}, you can use any other
single byte character, but not an alphanumeric character, '\', '"' or '|'.
This is useful if you want to include a '/' in the search pattern or
replacement string.
Итак, где я использовал #
, вы могли бы использовать ?
, @
или любой другой символ, отвечающий вышеуказанному условию. Загвоздка этой команды : g
заключается в том, что она ожидает команду в конце, поэтому, если у вас нет конечного пробела после последнего символа, поиск не будет выполняться так, как вы ожидали. И снова, даже если вы используете \ V
, вам все равно придется избегать обратных косых черт.
Если этот по-прежнему вам не подходит, в этом сообщении Nabble есть предложение, которое берет буквальную строку со встроенными обратными косыми чертами и другими специальными символами Vim, и утверждает, что ищет ее без проблем; но для этого необходимо создать функцию Vim,