Zacząłem używać gvima i nie do końca rozumiem, jak działa edycja wielowierszowa w gvimie.
Na przykład:
Oryginalny tekst:
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
ctrl + q, jjjjjj, $ wszystko jest zaznaczone, a następnie naciskam I, aby wykonać wstawkę wielowierszową.
Moim zamiarem jest wstawienie cudzysłowów jak w pierwszym wierszu, a następnie naciśnięcie Esc:
asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
Co się stało? Spodziewałem się zachowania podobnego do tego w sublimetext:
Jeśli nie wiesz, jak to działa, po prostu powtarza akcje dla każdej linii. Jak to osiągnąć? A co tu robi vim?
vim
sublimetext
text-editor
AlfredoVR
źródło
źródło
Odpowiedzi:
Zrób sobie przysługę, upuszczając warstwę zgodności z systemem Windows.
Normalnym skrótem do wejścia w tryb Visual-Block jest
<C-v>
.Inni zajmowali się nagrywaniem makr, oto kilka innych pomysłów:
Używa tylko trybu wizualnego blokowania .
Umieść kursor na drugim słowie:
Naciśnij,
<C-v>
aby przejść do trybu blokowania wizualnego i rozszerz wybór w dół:Uderz,
I"<Esc>
aby uzyskać:Umieść kursor na ostatnim znaku trzeciego słowa:
Naciśnij,
<C-v>
aby przejść do trybu blokowania wizualnego i rozszerz wybór w dół:Uderz,
A"<Esc>
aby uzyskać:Z trybem Visual-Block i Surround.vim .
Umieść kursor na drugim słowie:
Naciśnij,
<C-v>
aby przejść do trybu blokowania wizualnego i rozszerz wybór w dół i w prawo:Kliknij,
S"
aby otoczyć swój wybór „:Z trybem linii wizualnej i
:normal
.Naciśnij,
V
aby zaznaczyć całą linię i rozwinąć ją w dół:Wykonaj to polecenie:
:'<,'>norm ^wi"<C-v><Esc>eea"<CR>
aby uzyskać::norm[al]
pozwala na wykonywanie poleceń trybu normalnego na szeregu linii ('<,'>
część jest dodawana automatycznie przez Vima i oznacza "działaj na wybranym obszarze")^
umieszcza kursor na pierwszym znaku wierszaw
przechodzi do następnego słowai"
wstawia"
przed kursorem<C-v><Esc>
jest sposobem Vima na wprowadzenie znaku sterującego w tym kontekście, tutaj jest<Esc>
używany do wyjścia z trybu wstawianiaee
przechodzi na koniec następnego słowaa"
dodaje"
po kursorze<CR>
wykonuje polecenieUżywając Surround.vim, powyższe polecenie staje się
źródło
gv
aby przywrócić poprzedni wizualny wybór, a następnie przejść w poziomie, być może z2e
. (Im więcej linii, tym cenniejszegv
!)s
w trybie normalnym, ale dużegoS
w trybie wizualnym, więc w kroku 3 metody surround.vim naciśnięcia klawiszy powinny byćS"
S"
, a nies"
.
.To kilka dobrych, gotowych rozwiązań podanych powyżej, ale możemy również wypróbować niektóre wtyczki, które zapewniają wiele kursorów, takich jak Sublime.
Myślę, że ten wygląda obiecująco:
Przez jakiś czas wydawało się, że jest porzucony, ale w 2014 r. Miał swój wkład.
Jest dość potężny, chociaż trochę czasu zajęło mi przyzwyczajenie się do przepływu (który jest dość podobny do Sublime, ale nadal modalny jak Vim).
Z mojego doświadczenia wynika, że jeśli masz zainstalowanych wiele innych wtyczek, możesz napotkać pewne konflikty!
Istnieje kilka innych prób tej funkcji:
Nie krępuj się edytować, jeśli zauważysz, że którykolwiek z tych elementów ulega poprawie.
źródło
Jest na to kilka sposobów w Vimie. Nie wiem jednak, które są najbardziej podobne do Sublime Text.
Pierwszym byłby tryb wstawiania wielowierszowego . Umieść kursor na drugim „a” w pierwszym wierszu, naciśnij
Ctrl-V
, zaznacz wszystkie wiersze, a następnie naciśnijI
i wstaw podwójny cudzysłów. Naciśnięcie<esc>
spowoduje powtórzenie operacji na każdej linii.Drugi to makra. Umieść kursor na pierwszym znaku i zacznij rejestrować makro za pomocą
qa
. Idź w prawo za pomocąllll
, wejdź w tryb wstawiania za pomocąa
, umieść podwójny cudzysłów, wyjdź z trybu wstawiania i wróć do początku wiersza za pomocą<home>
(lub odpowiednika). Naciśnij,j
aby przejść o jeden wiersz w dół. Zatrzymaj nagrywanie za pomocąq
. Następnie powtórz makro za pomocą@a
. Kilka razy.Czy którekolwiek z powyższych podejść działa dla Ciebie?
źródło
jeśli użyjesz polecenia „global”, możesz powtórzyć to, co możesz zrobić w jednym trybie online w dowolnej liczbie wierszy.
przykład:
Powyższe polecenie znajduje wszystkie linie, które mają foo, i zamienia wszystkie wystąpienia bar w tej linii na baz.
zrobi na każdej linii
źródło
:g
opisane tutaj polecenie. Lubię/gc
prosić o „potwierdzenia”, aby móc trafićy
lubn
dla każdej wymiany luba
zmienić je wszystkie.źródło
I
nie można przejść do trybu wstawiania, czy wiesz, dlaczego tak się dzieje?vim -u NONE
i spróbuj ponownie wykonać żądaną akcję, może to być jakaś mapa lub wtyczka zmieniająca zachowanie twojego vima.Nie jestem pewien, co
vim
robi, ale to ciekawy efekt. Sposób, w jaki opisujesz to, czego chcesz, bardziej przypomina działanie makr (:help macro
). Coś takiego zrobiłoby to, co chcesz z makrami (zaczynając w trybie normalnym):qa
:a
Zarejestruj makro do zarejestrowania.0w
:0
idź do początku wiersza,w
przeskocz o jedno słowo.i"<Esc>
: Wejdź w tryb wstawiania, wstaw a"
i wróć do trybu normalnego.2e
: Przejdź na koniec drugiego słowa.a"<Esc>
: Dołącz plik"
.jq
Przejdź do następnego wiersza i zakończ nagrywanie makra.Razem wzięte:
qa0wi"<Esc>2ea"<Esc>
Teraz możesz wykonać makro za pomocą
@a
, powtórzyć ostatnie makro za pomocą@@
. Aby zastosować się do reszty pliku, zrób coś,99@a
co przy założeniu, że nie masz więcej niż 99 linii, wykonanie makra zakończy się, gdy osiągnie koniec pliku.Oto jak osiągnąć to, czego chcesz
visual-block-mode
(zaczynając w trybie normalnym):visual-block-mode
, wybierz linie, na które chcesz wpłynąć,G
aby przejść do końca pliku.I"<Esc>
."
..
, wystarczy prosta .źródło
9999@a
może być brzydki, ale pisanie jest o wiele łatwiejsze niż:%norm! @a
i nie uruchamia się ponownie w właśnie edytowanym wierszu. Mimo wszystko dobrze to wiedzieć. :)Moje rozwiązanie polega na użyciu tych dwóch mapowań:
Jak ich używać:
V12j
<leader>n
<leader>m
Aby dokonać kolejnej edycji, nie musisz ponownie dokonywać wyboru. Po prostu naciśnij
<leader>n
, wprowadź zmiany i naciśnij,<leader>m
aby zastosować.Jak to działa:
<Esc><Esc>0qq
Wyjdź z wizualnej selekcji, przejdź na początek wiersza i zacznij nagrywać makro.q
Zatrzymaj nagrywanie makra.:'<,'>-1normal!@q<CR>
Od początku selekcji wizualnej do linii przed końcem odtwórz makro w każdej linii.<Down>
Wróć do ostatniej linii.Możesz także zmapować ten sam klawisz, ale dla różnych trybów:
Chociaż zakłóca to twoją możliwość wprowadzenia kolejnej edycji. Będziesz musiał ponownie wybrać swoje linie.
źródło