Jak mogę szybko cytować / cofać cytowanie słów i zmieniać cytowanie (np. Z '
na "
) w Vimie? Wiem o wtyczce surround.vim , ale chciałbym użyć tylko Vima.
204
Jak mogę szybko cytować / cofać cytowanie słów i zmieniać cytowanie (np. Z '
na "
) w Vimie? Wiem o wtyczce surround.vim , ale chciałbym użyć tylko Vima.
Odpowiedzi:
surround.vim będzie twoją najłatwiejszą odpowiedzią. Jeśli naprawdę nie chcesz go używać, oto kilka przykładów tego, co możesz zrobić. Niekoniecznie najbardziej wydajny, ale właśnie dlatego napisano surround.vim.
ciw'Ctrl+r"'
ciw
- Usuń słowo, na którym znajduje się kursor, i zakończ tryb wstawiania.'
- dodaj pierwszy cytat.Ctrl+r"
- Wstaw zawartość"
rejestru, czyli ostatni szarpnięcie / usuń.'
- dodaj cytat końcowy.di'hPl2x
di'
- Usuń słowo ujęte w pojedyncze cudzysłowy.hP
- Przesuń kursor w lewo o jedno miejsce (nad cytatem otwierającym) i umieść właśnie usunięty tekst przed cytatem.l
- Przesuń kursor w prawo o jedno miejsce (nad cytatem otwierającym).2x
- Usuń dwa cytaty.va':s/\%V'\%V/"/g
va'
- Wybierz wizualnie cytowane słowo i cytaty.:s/
- Rozpocznij wymianę.\%V'\%V
- Dopasowuj tylko pojedyncze cudzysłowy znajdujące się w obrębie wizualnie wybranego regionu./"/g
- Zastąp je wszystkie podwójnymi cudzysłowami.źródło
ciw
nie tylkocw
? Pierwszy jest mylący, a drugi działa dobrze.ciw
działa niezależnie od tego, gdzie znajduje się kursor w słowie.cw
działa tylko wtedy, gdy kursor znajduje się na początku słowa. Zobaczyć:help iw
..
poleceniem. Aby to zadziałało, użyjciw' Ctrl+r Ctrl+p"
. Następnie.
będzie zachowywał się tak, jak chcesz dla następującego słowa: zamiast zapamiętywać zawartość rejestru, zapamięta, że chcesz, aby wszystko, co jest teraz w rejestrze (trochę trudne do wyjaśnienia, ale jeśli spróbujesz obu, stanie się oczywiste :-))Łatwiej było mi to zrobić w ten sposób
źródło
Oto mapowanie, które może pomóc:
Jeśli nie zmieniłeś zmiennej mapleader, aktywuj mapowanie za pomocą
\q"
\q'
lub\qd
. Dodają podwójny cudzysłów wokół słowa pod kursorem, pojedynczy cudzysłów wokół słowa pod kursorem, usuwają odpowiednio wszelkie cudzysłowy wokół słowa pod kursorem.źródło
map <Leader>' gewi'<Esc>A'<Esc>
do mojego.vimrc
pliku, aby wstawić komentarze pojedynczego cudzysłowu od bieżącej pozycji do końca wiersza; co pomogło mi podczas konwersji niektórych skryptów MSDOS na bash.:vnoremap <leader>q c""<esc>P
.Oprócz innych poleceń spowoduje to umieszczenie wszystkich słów w wierszu w podwójnych cudzysłowach (zgodnie z komentarzem)
lub jeśli chcesz zmniejszyć liczbę odwrotnych ukośników, możesz umieścić
\v
(bardzo magiczny) modyfikator na początku wzoruźródło
:s/\v([a-Z]+)/"\1"/g
Makro sposoby!
naciśnij qi, qaby zapisać w rejestrze q (używamy „q” jako skrótu do zapamiętania „cudzysłowów”).
naciśnij shift+ bprzesuń kursor na przód bieżącego słowa
ityp prasy '(pojedyncze cytaty)
naciśnij, esca następnie naciśnij, eaby przejść do końca słowa
naciśnij, aa następnie naciśnij 'ponownie, aby otoczyć słowo cudzysłowami.
naciśnij, escaby przejść do trybu normalnego.
na koniec naciśnij, qaby zarejestrować w
q
rejestrze.Jak używać
Możesz zmieniać
step 4
cokolwiek lubisz {wiersz, słowo, dopóki nie znajdziesz znaku itp.}.Ustaw utrwalone makro
Zapisz i wyjdź
otwórz swoje pliki, przejdź do kilku słów
@q
jeśli zrobisz to poprawnie, magiczne rzeczy powinny pojawić się w twoich słowach.
Możesz wykonać te czynności dla innych makr, które kochałeś.
źródło
@q w
a następnie możesz zawinąć następnen
słowa w cudzysłów, używając przy pomocyn@j
.Zawijanie pojedynczych cudzysłowów (na przykład)
ciw'<C-r>"'<esc>
działa, ale funkcja powtarzania nie działa. Próbować:To powoduje, że zawartość rejestru domyślnego jest „dosłownie”. Teraz możesz nacisnąć
.
dowolne słowo, aby zawinąć je w cudzysłów. Aby dowiedzieć się więcej, zobacz:h[elp] i_ctrl-r
i więcej o obiektach tekstowych na stronie:h text-objects
Źródło: http://vimcasts.org/episodes/pasting-from-insert-mode/
źródło
ciw'<C-R><C-O>"'<Esc>
..
spowoduje przepisanie zawartości ostatniego rzeczywistego wywołania.Dla użytkowników VSCodeVim możesz to zrobić
vwS"
"
co chcesz owinąć.w
dowolnym innym operatorem wyboruźródło
viwS'
który zawija słowo w pojedyncze cudzysłowy. Zdecydowanie najłatwiejszy.viwS"
Nie znam żadnego wbudowanego polecenia vim do tego, ale
r"f'r"
zmiana z „na” ir'f"r'
zmiana z „na” działa, jeśli stoisz na pierwszym „lub”. Polecenie tor'
zastępuje dowolny znak pod kursorem „, if"
przenosi Cię do następnego ”.źródło
'r
i"r
) możesz po prostu wpisać.
I, jeśli chcesz zmienić więcej cudzysłowów,;
i,
przejść do następnego lub poprzedniego, ponieważ powtarzają one ostatnief/F/t/T
wyszukiwanie odpowiednio w tym samym lub przeciwnym kierunku.Dodawanie cytatów
Zacząłem używać tej szybkiej i brudnej funkcji w moim
.vimrc
:Więc teraz wybieram wizualnie, co chcę (zwykle poprzez
viw
- wizualnie wybieram słowo wewnętrzne ) w cudzysłowach i naciskam, Qaby wstawić podwójne cudzysłowy, lub naciskając qpojedyncze cudzysłowy.Usuwanie cytatów
Używam vim-textobj-quotes , aby vim traktował cytaty jako obiekty tekstowe. Oznacza to, że mogę to zrobić
vaq
(wizualnie wybieraj wokół cytatów . Znajduje najbliższe cytaty i wizualnie je wybiera. (Jest to opcjonalne, możesz po prostu zrobić coś takiegof"vww
). Następnie naciskam,s
aby usunąć cytaty z zaznaczenia.Zmiana cytatów
POCAŁUNEK. I usunąć cudzysłowy następnie dodać cytaty . Na przykład, aby zastąpić pojedyncze cudzysłowy w cudzysłowy, chciałbym wykonać czynności: 1. Zdejmij apostrofów:
vaqs
2. dodawać nowe cytaty:vwQ
.źródło
Jeśli korzystasz z wtyczki vim https://github.com/tpope/vim-surround (lub używasz wtyczki VSCode Vim, która jest fabrycznie zainstalowana z vim-surround), jest to całkiem wygodne!
Dodaj
upuszczać
zmiana
Działa nawet w przypadku tagów HTML!
sprawdź readme na github, aby uzyskać lepsze przykłady
źródło
Oto kilka prostych mapowań, których można użyć do zacytowania i cofnięcia słowa:
źródło
qw
qd
wq
VIM dla vscode robi to niesamowicie. Opiera się na jednym vim-surround, jeśli nie używasz vscode.
źródło
Używam nnoremap w moim .vimrc
Aby zacytować jedno słowo:
Aby usunąć cudzysłowy (działa również na podwójne cudzysłowy):
Reguła do zapamiętania: „sq” = pojedynczy cytat.
źródło
co powiesz na to?
źródło
%
tego będzie działał tylko w bieżącym wierszu, chyba że wybierzesz cały plikNapisałem skrypt, który to robi:
Aby użyć, po prostu zaznacz coś, naciśnij klawisz kontrolny l, a następnie wpisz znak. Jeśli jest to jeden ze znaków, o których funkcja wie, dostarczy prawidłowego znaku kończącego. Jeśli nie, użyje tego samego znaku do wstawienia po obu stronach.
Surround.vim potrafi więcej niż tylko to, ale to wystarczyło na moje potrzeby.
źródło
Przykład mapy trybu wizualnego, aby dodać pojedyncze cudzysłowy wokół wybranego bloku tekstu:
źródło