2010-09-21 12 views

Respuesta

50

No directamente, sin embargo siempre se puede utilizar un mapeo:

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

Incluso si se pudiera establecer 'muy mágico' en el camino se puede set nomagic, que realmente no desearía que se rompería bastante muchos de los complementos que existen

Editar

Véase también this page.

+1

Buen punto acerca de los complementos. De alguna manera, no pensé en esto. Gracias por una respuesta. – bgaluszka

+0

He agregado un enlace a una página de wikia que puede serle útil. – DrAl

+15

+1 Gracias. FWIW, esto parece un propósito más general: ': cnoremap s/s/\ v'. – FMc

8

EDIT2: Acabo de descubrir este complemento, que puede ser mejor que las soluciones de reasignación (que parecen tener algunos inconvenientes ineludibles, ver más abajo). No lo he probado aún, así que no sé si se comporta exactamente como se desea.

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

Edit3: He estado usando el plugin por alrededor de un año y medio, y lo amo. Todavía interfiere con el historial de búsqueda, sin embargo (véase más adelante), y también rompe incsearch, así que tengo el siguiente en mi config 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 

utilicé la sugerencia de Dräi por un tiempo, pero me pareció frustrante en la práctica por el siguiente comportamiento:

Si escribe lo siguiente: /{patrón} :% s // {} reemplazo

... entonces, sin esta asignación, se puede ver lo estás a punto para reemplazar antes de hacer un reemplazo. Pero con la reasignación, de repente tiene s/\v/ en lugar de s//; esto coincide con todo en el archivo, lo cual es obviamente incorrecto.

Afortunadamente, el comando s tiene una forma alternativa que usa very magic para su búsqueda. Así que aquí están las asignaciones Actualmente estoy utilizando en mi .vimrc:

nnoremap//\v 
vnoremap//\v 
cnoremap %s/ %smagic/ 
cnoremap >s/ >smagic/ 
nnoremap :g/ :g/\v 
nnoremap :g// :g// 

Tenga en cuenta que acaba de mapeo s/ conduce a problemas al intentar utilizar un patrón que termina en s; de manera similar, mapear g/ crearía problemas al usar patrones que terminan en g. Tenga en cuenta que las asignaciones :g/ y :g// evitan que Vim muestre el comando inmediatamente.

EDIT: Por desgracia, no parece ser una versión "mágica" de :global, por lo que se utiliza el mapeo aparentemente superfluo de :g// para asegurar que el comando global puede utilizar el patrón de búsqueda anterior.

Otro inconveniente es que estos remaches interfieren con el historial de búsqueda. Como ejemplo, considere usar * para buscar la siguiente aparición de la palabra debajo del cursor.Esto hace que Vim busque el patrón \<[word]\>, que hace no comienza con \v. Sin las nuevas funciones descritas anteriormente, al escribir / y presionar la flecha hacia arriba se recordará ese patrón de búsqueda. Con las reasignaciones, sin embargo, después de escribir /, debe eliminar el \v insertado automáticamente antes de presionar la flecha hacia arriba para recuperar ese patrón.

+0

'cnoremap> s /> smagic /' no parece funcionar cuando selecciono un rango visual. También intenté escapar del corchete a 'cnoremap \> s/\> smagic /' pero tampoco funcionó. –

+0

@DaveKennedy ¿Has probado el plugin? Es mucho más confiable para mí; He tenido muy pocos problemas con eso. Ya no uso las asignaciones enumeradas en ese segundo bloque de código. –

Cuestiones relacionadas