EDIT2: я только что обнаружил этот плагин, который может быть лучше, чем решения для переназначения (которые, кажется, имеют некоторые неизбежные недостатки; см. Ниже). Я еще не проверял это, поэтому я не знаю, ведет ли он себя точно так, как хотел.
http://www.vim.org/scripts/script.php?script_id=4849
EDIT3: я использовал плагин около полутора лет, и мне это нравится. Однако он по-прежнему мешает истории поиска (см. Ниже) и также ломает incsearch
, поэтому в моей конфигурации Vim есть следующее:
" Since I use incsearch:
let g:VeryMagic = 0
nnoremap / /\v
nnoremap ? ?\v
vnoremap / /\v
vnoremap ? ?\v
" If I type // or ??, I don't EVER want \v, since I'm repeating the previous
" search.
noremap // //
noremap ?? ??
" no-magic searching
noremap /v/ /\V
noremap ?V? ?\V
" Turn on all other features.
let g:VeryMagicSubstituteNormalise = 1
let g:VeryMagicSubstitute = 1
let g:VeryMagicGlobal = 1
let g:VeryMagicVimGrep = 1
let g:VeryMagicSearchArg = 1
let g:VeryMagicFunction = 1
let g:VeryMagicHelpgrep = 1
let g:VeryMagicRange = 1
let g:VeryMagicEscapeBackslashesInSearchArg = 1
let g:SortEditArgs = 1
Я некоторое время пользовался предложением DrAI, но на практике нашел разочарование из-за следующего поведения:
Если вы введете следующее:
/{шаблон}
:% S // {замена}
... тогда, без этого сопоставления, вы можете увидеть, что собираетесь заменить, прежде чем делать замену. Но с переназначением у вас внезапно появляется s/\v/
вместо s//
; это соответствует всем в файле , что явно неверно.
К счастью, сама команда s
имеет альтернативную форму, которая использует very magic
для своего поиска. Итак, вот сопоставления, которые я сейчас использую в своем .vimrc
:
nnoremap / /\v
vnoremap / /\v
cnoremap %s/ %smagic/
cnoremap >s/ >smagic/
nnoremap :g/ :g/\v
nnoremap :g// :g//
Обратите внимание, что простое сопоставление s/
приводит к проблемам при попытке использовать шаблон, который заканчивается на s
; аналогично, отображение g/
создаст проблемы при использовании шаблонов, оканчивающихся на g
. Обратите внимание, что сопоставления :g/
и :g//
не позволяют Vim немедленно показывать команду.
РЕДАКТИРОВАТЬ: К сожалению, не существует "волшебной" версии :global
, поэтому, казалось бы, избыточное отображение :g//
используется для того, чтобы глобальная команда могла использовать предыдущий шаблон поиска.
Другим недостатком является то, что эти переназначения влияют на историю поиска. В качестве примера рассмотрим использование *
для поиска следующего вхождения слова под курсором. Это заставляет Vim искать шаблон \<[word]\>
, который не начинается с \v
. Без переназначений, описанных выше, ввод /
и нажатие стрелки вверх вызовут этот шаблон поиска. С помощью переназначений, однако, после ввода /
необходимо удалить автоматически вставленный \v
перед нажатием стрелки вверх, чтобы вызвать этот шаблон.