在vim中,有没有办法永久和全局地设置“非常神奇”?

我使用“非常神奇”的正则expression式search(即/ \ v或%s / \ v),但我希望我可以设置一些选项,所以我不必在任何地方包括\ v。 有没有办法做到这一点?

不是直接的,但是你总是可以使用映射:

:nnoremap / /\v :cnoremap %s/ %s/\v 

即使你可以设置“非常神奇”的方式,你可以set nomagic ,你真的不希望,因为它会打破几乎每一个插件存在。

编辑

另见这个页面 。

编辑2:我刚刚发现这个插件,这可能比重新映射解决scheme更好(这似乎有一些不可避免的缺点,见下文)。 尽pipe如此,我还没有testing过,所以我不知道它是否按照要求运行。

http://www.vim.org/scripts/script.php?script_id=4849

编辑3:我一直在使用插件约一年半,我喜欢它。 它仍然干扰search历史,但是(见下文),它也打破incsearch ,所以我有以下在我的Vimconfiguration:

 " 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的一段时间的build议,但由于以下行为,在实践中发现它令人沮丧:

如果input以下内容:/ {pattern}:%s // {replacement}

…然后,没有这个映射,你可以看到你要replace之前,你要取代什么。 但是重映射,你突然有s/\v/而不是s// ; 这与文件中的eveything相匹配,这显然是错误的。

幸运的是, s命令本身有一个替代forms,使用very magic的search。 所以这里是我目前在我的.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//是用来确保全局命令可以使用以前的search模式。

另一个缺点是这些重新映射会干扰search历史logging。 作为例子,考虑用*来search光标下的单词的下一个出现。 这会导致Vimsearch\v开头的模式\<[word]\> 。 如果没有上述的重新映射,input/并按下向上箭头将会回想起search模式。 然而, 对于重新映射,在键入/ ,您必须先删除自动插入的\v然后按向上箭头才能调出该模式。