2010-09-21 11 views

Odpowiedz

50

Nie bezpośrednio, ale zawsze można użyć mapowania:

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

Nawet jeśli można ustawić „bardzo magia” w taki sposób można set nomagic, to naprawdę nie chcesz jak to przełamać dość wiele istniejących wtyczek.

Edit

Zobacz również this page.

+1

Dobra uwaga na temat wtyczek. Jakoś nie pomyślałem o tym. Dziękuję za odpowiedź. – bgaluszka

+0

Dodałem link do strony wikia, która może ci się przydać. – DrAl

+15

+1 Dzięki. FWIW, wydaje się bardziej ogólny cel: ': cnoremap s/s/\ v'. – FMc

8

EDIT2: Właśnie odkryłem tę wtyczkę, która może być lepsza niż rozwiązania remapowania (które wydają się mieć pewne nieuniknione wady, patrz poniżej). Nie testowałem go jeszcze, więc nie wiem, czy zachowuje się dokładnie tak, jak tego chce.

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

Edit3: Używam plugin przez około półtora roku, i kocham go. To wciąż zakłóca historii wyszukiwania, jednak (patrz poniżej), a także łamie incsearch, więc mam następujących w moim Vima config:

" 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 

użyłem sugestię Dral za chwilę, ale okazało się, że frustrujące w praktyce ze względu na następujące zachowanie:

Jeśli wpiszesz następujący: /{wzór} :% s // {} zastępstwo

... potem, bez tego odwzorowania, można zobaczyć, co jesteś około aby wymienić przed dokonaniem wymiany. Ale po ponownym przyporządkowaniu, nagle masz s/\v/ zamiast s//; to pasuje do wszystkiego w pliku, co oczywiście jest błędne.

Na szczęście samo polecenie s ma alternatywną formę, która używa do wyszukiwania very magic. Tak oto odwzorowania obecnie używam w moim .vimrc:

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

Należy pamiętać, że tylko odwzorowywać s/ prowadzi do problemów, gdy próbuje użyć wzoru, który kończy się w s; podobnie, mapowanie g/ może powodować problemy podczas korzystania z wzorców kończących się na g. Zwróć uwagę, że odwzorowania :g/ i :g// uniemożliwiają Vimowi natychmiastowe wyświetlenie polecenia.

EDYCJA: Niestety, nie wydaje się być "magiczną" wersją :global, dlatego pozornie niepotrzebne odwzorowanie :g// służy do zapewnienia, że ​​polecenie globalne może korzystać z poprzedniego wzorca wyszukiwania.

Inną wadą jest to, że te przemapy zakłócają historię wyszukiwania. Jako przykład rozważ użycie opcji *, aby wyszukać następne wystąpienie słowa pod kursorem.To powoduje, że Vim szuka wzoru \<[word]\>, który mastart z . Bez opisanych powyżej przemapowań wpisanie / i naciśnięcie strzałki w górę spowoduje przywołanie wzorca wyszukiwania. Przy ponownym dodawaniu po po wpisaniu / należy usunąć automatycznie wstawiony \v przed naciśnięciem strzałki w górę w celu przywołania tego wzorca.

+0

'cnoremap> s /> smagic /' wydaje się nie działać po wybraniu zakresu wizualnego. Próbowałem również ucieczki z nawiasu do 'cnoremap \> s/\> smagic /' ale to też nie działało. –

+0

@DaveKennedy Czy wypróbowałeś wtyczkę? Jest dla mnie o wiele bardziej niezawodny; Miałem z tym kilka problemów. Nie używam już mapowań wymienionych w tym drugim bloku kodu. –

Powiązane problemy