Jak ponownie używasz wyboru trybu wizualnego?

163

Często podczas edycji kodu wybieram blok w trybie wizualnym, szukam go i zastępuję nad tym blokiem. Po wprowadzeniu zmian opuszcza tryb wizualny. Jak wykonać nowe wyszukiwanie i zastąpić ten sam wybór?

labirynt
źródło
Znalazłem jeden sposób, ale jest to trochę kłopotliwe:: „<,”> s / old / new / g Jakikolwiek sposób, aby to zrobić bez konieczności wpisywania „<,”>?
labirynt

Odpowiedzi:

243

Możesz ponownie wybrać ostatnio wybrany obszar wizualny za pomocą gv.

Heptyt
źródło
4
Niesamowite! @Heptite jak sam znaleźć to polecenie w \ o Stackoverflow?
skywinder
6
@skywinder: help gv
Heptite
4
@Heptite: Nie jestem pewien, czy mówisz tutaj z przymrużeniem oka, ale to polecenie pokazuje, co: gv robi, gdy się o tym dowiesz. Ale co jeśli nie ? Naucz (wo) człowieka, aby łowił ryby i tak dalej.
Ben Thul,
@BenThul: Myślę, że źle zrozumiałem pytanie. Wiem o wielu funkcjach Vima po prostu czytając całą dokumentację w czasie, zaczynając od „ :help”.
Heptyt
2
:help select-visualpowinien doprowadzić cię do właściwej instrukcji w vim @skywinder.
14

gv jest zdecydowanie najszybszą metodą (użyj ostatniego zaznaczenia), ale jeśli chcesz mieć stabilny zapisany region zaznaczenia (lub kilka), zawsze możesz tworzyć makra.

Powiedzmy, że chcę zapisać wybór mojej bieżącej metody, która pochodzi z wierszy 25–35. Mogę utworzyć makro, które wybiera całą metodę, pisząc

q    //start recording
a    //use register a
25G  //Go to line 25
V    //visual-line mode
35G  //Go to line 35
q    // stop recording

Następnie mogę odzyskać ten wybór, pisząc @a(uruchom makro w rejestrze a). Powtórz z dowolnym rejestrem, liniami lub sekcjami linii, które chcesz. Oczywiście, jeśli wprowadzisz zmiany w pliku, wybór może się również zmienić, więc możesz rozważyć użycie znaków zamiast numerów wiersza „na stałe”.

AlexMA
źródło
zmto wpisz, że musisz znać numery linii. Myślę, że lepiej jest zdefiniować dwa znaki, a następnie użyć: „a,” b, aby operować na odległości między nimi (lub zastąpić „backticks, jeśli chcesz ziarnistość w linii)
sillyMunky
Tak, sprawa z numerami linii była głupia - użyłem jej tylko jako przykładu tworzenia makra selekcji. Ciekawym pomysłem jest użycie szeregu znaków ...
AlexMA
6

gvdziała świetnie przy odzyskiwaniu ostatniego zaznaczenia. Ale czasami trzeba trochę więcej.

Jeśli kiedykolwiek potrzebowałeś bardziej trwałego zapisu, spójrz na tę wtyczkę, nad którą obecnie pracujemy na GitHub.

VisualMarks pozwala zapisywać i przywracać wizualnie wybrane obszary, tak jak zapisujesz i zaznaczasz określone lokalizacje w swoich plikach m. Po zainstalowaniu i przy domyślnych opcjach użyj:

ma

w trybie wizualnym, aby zapisać bieżące zaznaczenie, aby zaznaczyć a, a następnie

<a

w trybie normalnym, aby wrócić do tego wyboru.

iago-lito
źródło
Wow, to brzmi naprawdę fajnie. Będę musiał spróbować tej wtyczki! Nawiasem mówiąc, czy te VisualMark mogą pozostać przy mkview tak jak ty możesz ze znakami?
labirynt
@labyrinth Nie wiem, mkviewale .. Myślę, że tak, ponieważ znaki są zapisywane w osobnym pliku i .. Sugeruję spróbować mimo to :) Jeśli nie będą się utrzymywać tak, jak chcesz, z przyjemnością otrzymamy Twoją funkcję żądanie na GitHub i spróbuj go przetworzyć.
iago-lito
1

Załóżmy, że chciałem zastąpić „Do widzenia” Cześć i wybrano poniższy kod:

public static void main(String[] args){
    System.out.println("Goodbye World");
}

Chciałbym wpisać :s/Goodbye/Hello/i vim będzie zastąpić wszystkie wystąpienia GoodbyezHello

Jest to po prostu kombinacja wyrażeń regularnych vima i wybranych trybów wizualnych. Po wybraniu powinno się ono automatycznie wypełnić'<,'>

Scott Nguyen
źródło
1
Przepraszam, nie o to prosiłem. Pytam, w jaki sposób ponownie wykorzystujesz zaznaczenie, aby dokonać innego znalezienia i zastąpić ten sam zakres, co wcześniej wybrany?
labirynt
1
Po wymianie wyjdziesz z trybu wizualnego. wpisz, gva tryb wizualny powróci do poprzedniego stanu zaznaczenia.
Scott Nguyen,