Czy mogę zrobić interaktywny: zamień (wyszukaj i zamień)?
17
Czasami używam :sze skomplikowanym wyrażeniem regularnym, które może, ale nie musi być poprawne, lub nie jestem pewien, czy chcę zastąpić wszystkie dopasowania.
Czy mogę w jakiś sposób powiedzieć Vimowi, aby potwierdzał każde znalezione dopasowanie, zanim faktycznie zastąpi tekst?
Tak! Użyj cflagi dla :substitute. Od :help substitute:
[c] Confirm each substitution. Vim highlights the matching string (with
hl-IncSearch). You can type: :s_c
'y' to substitute this match
'l' to substitute this match and then quit ("last")
'n' to skip this match
<Esc> to quit substituting
'a' to substitute this and all remaining matches {not in Vi}
'q' to quit substituting {not in Vi}
CTRL-E to scroll the screen up {not in Vi, not available when
compiled without the +insert_expand feature}
CTRL-Y to scroll the screen down {not in Vi, not available when
compiled without the +insert_expand feature}
Przykład użycia jest prosty jak ciasto:
%s/old/new/c
Jest to bardzo przydatne, ale nie wiedziałem o tym jeszcze 2 tygodnie temu :-) I jest nawet dostępne w ol 'vi :-)
Dodatkowa wskazówka: Możesz także użyć :set nowrapscan; Zapobiega to zawijaniu się Vima do góry, gdy uderza w dno. Uważam, że jest to szczególnie przydatne podczas używania cflagi.
Ustawienie &incsearch( set incsearch) w Vimie jest naprawdę przydatne. Możesz go używać razem z użyteczną i mało znaną sztuczką.
Sztuką jest wypróbowanie złożonego wyrażenia regularnego za pomocą polecenia /lub ?. Vim użyje tego &incsearchustawienia do interaktywnego wyświetlania meczów. Gdy będziesz zadowolony z wyrażenia regularnego, możesz użyć :%s//replacementvima, by użył poprzedniego wyszukiwania.
Zauważ, że część w //jest pusta (w tym miejscu wpisujesz tekst do wyszukiwania). Jeśli pozostawisz to puste, mówisz Vimowi, aby używał poprzedniego wyrażenia regularnego wyszukiwania. Dzięki temu możesz pisać złożone wyrażenia regularne za pomocą /i mieć wszystkie zalety set incsearch, a następnie użyć %s//replacementpolecenia, aby faktycznie wykonać wyszukiwanie i zamienić.
Jeśli chcesz czegoś podobnego do wyszukiwania :spoleceń, sprawdź vim-over , ale ja po prostu wolę używać natywnego sposobu Vima.
Kiedyś używałem tego wariantu: po prostu użyj, :%s/pattern/replace/a następnie naciśnij, uaby cofnąć, możesz zobaczyć części, które Vim zmienił, jeśli hlsearchwłączyłeś. Możesz ponownie zamienić ten tekst na ^R.
Martin Tournoij
7
Moim ulubionym interaktywnym zastępstwem jest wyszukiwanie za pomocą /i przechodzenie przez mecze za pomocą n.
Następnie wybierz dopasowanie za pomocą, gna następnie, saby zastąpić tekst tym, co lubię.
I powtórzyć przenosząc się do następnego meczu i naciskając.
Jest to bardzo fajna sztuczka, ponieważ jest: (1) interaktywna, (2) możesz przejść poprzedni mecz, jeśli przypadkowo go pominąłeś (coś, czego nie możesz zrobić :s/old/new/gc).
Ayrat
3
W Neovim jest również 'inccommand'opcja, która pozwala wyświetlić podgląd :spolecenia podczas pisania.
:%s/pattern/replace/
a następnie naciśnij,u
aby cofnąć, możesz zobaczyć części, które Vim zmienił, jeślihlsearch
włączyłeś. Możesz ponownie zamienić ten tekst na^R
.Moim ulubionym interaktywnym zastępstwem jest wyszukiwanie za pomocą /i przechodzenie przez mecze za pomocą n.
Następnie wybierz dopasowanie za pomocą, gna następnie, saby zastąpić tekst tym, co lubię.
I powtórzyć przenosząc się do następnego meczu i naciskając.
źródło
:s/old/new/gc
).W Neovim jest również
'inccommand'
opcja, która pozwala wyświetlić podgląd:s
polecenia podczas pisania.źródło
Z korzyścią dla wszystkich
incsearch
został zaktualizowany w vim8, aby wyświetlał również podgląd podczas pisania wzoruźródło