2010-09-21 14 views

risposta

50

Non direttamente, ma si può sempre usare una mappatura:

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

Anche se è possibile impostare 'molto magica' nel modo in cui si può set nomagic, davvero non vorresti come si spezzerebbe abbastanza molti plug-in esistenti.

Modifica

Vedi anche this page.

+1

Buon punto sui plugin. In qualche modo non ci avevo pensato. Grazie per la risposta. – bgaluszka

+0

Ho aggiunto un collegamento a una pagina di wiki che potrebbe esserti utile. – DrAl

+15

+1 Grazie. FWIW, questo sembra più generale: ': cnoremap s/s/\ v'. – FMc

8

EDIT2: Ho appena scoperto questo plug-in, che potrebbe essere migliore delle soluzioni di rimappatura (che sembrano avere alcuni svantaggi inevitabili, vedi sotto). Non l'ho ancora provato, quindi, non so se si comporti esattamente come desiderato.

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

Edit3: Sto usando il plugin per circa un anno e mezzo, e mi piace. Interferisce ancora con la cronologia delle ricerche, però (vedi sotto), e si rompe anche incsearch, così ho il seguente nel mio 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 

ho usato il suggerimento di Drai per un po ', ma l'ho trovato frustrante, in pratica, a causa del seguente comportamento:

Se si digita il seguente: /{pattern} :% s // {sostituzione}

... poi, senza questa mappatura, si può vedere che cosa stai per per sostituire prima di fare una sostituzione. Ma con la rimappatura, all'improvviso hai s/\v/ anziché s//; questo corrisponde a eveything nel file, che è ovviamente sbagliato.

Fortunatamente, il comando s ha una forma alternativa che utilizza very magic per la sua ricerca. Così qui sono le mappature Attualmente sto usando nella mia .vimrc:

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

Si noti che solo la mappatura s/ porta a problemi quando si tenta di utilizzare un modello che termina in s; analogamente, la mappatura di g/ creerebbe problemi quando si utilizzano modelli che terminano con g. Si noti che i mapping :g/ e :g// impediscono a Vim di mostrare immediatamente il comando.

EDIT: Purtroppo, non sembra essere una versione "magia" di :global, motivo per cui viene utilizzata la mappatura apparentemente superfluo di :g// al fine di garantire che il comando globale può utilizzare il precedente modello di ricerca.

Un altro svantaggio è che questi remapping interferiscono con la cronologia delle ricerche. Ad esempio, considera l'utilizzo di * per cercare l'occorrenza successiva della parola sotto il cursore.Ciò fa sì che Vim cerchi il pattern \<[word]\>, che non inizi con \v. Senza i remapping descritti sopra, digitando / e premendo la freccia su richiamerà quel modello di ricerca. Con i remapping, tuttavia, dopo aver digitato /, è necessario eliminare lo \v automaticamente inserito prima di premere la freccia su per richiamare quel motivo.

+0

'cnoremap> s /> smagic /' non sembra funzionare quando seleziono un intervallo visivo. Ho anche provato a sfuggire alla parentesi su 'cnoremap \> s/\> smagic /' ma non ha funzionato neanche. –

+0

@DaveKennedy Hai provato il plugin? È molto più affidabile per me; Ho avuto pochissimi problemi con esso. Non uso più le mappature elencate in quel secondo blocco di codice. –

Problemi correlati