2009-09-05 21 views
9

W niektórych edytorach tekstu, takich jak e, możesz wybrać wiele lokalizacji, a podczas pisania wszystkie wybrane lokalizacje zostaną zastąpione znakami, które wpisujesz.vim edytuj wiele lokalizacji jednocześnie

Na przykład załóżmy, że masz

<tag1 class=""></tag1> 
<tag2><tag3 class=""></tag3></tag2> 

w E, można wybrać tylko dwie lokalizacje (wewnątrz zestawów znaków notowań), a następnie rozpocząć wpisywanie i obie lokalizacje zostaną zaktualizowane simulataneously. W vimie możesz wybrać kilka połączonych kolumn naraz, a następnie edytować je, ale zastanawiam się, czy istnieje jakikolwiek sposób wyboru wielu lokalizacji, które nie są ułożone w kolejce.

+0

Czy możesz powiedzieć coś więcej o tym, co masz na myśli przez „wszystkich wybranych lokalizacjach”? Czy te wybrane lokalizacje są w tym samym kształcie, na przykład w kolumnie? A może wszystkie zawierają ten sam początkowy tekst? –

+0

@Greg - Edytowałem pytanie, by wyjaśnić. Nadzieja, która pomaga. – Daniel

+0

dla mnie, ta funkcja jest bardziej jak wyszukiwanie i zamiana, ale w bardziej fantazyjny sposób – nXqd

Odpowiedz

2

Wystarczy popatrzeć na SnippetsEmu. Powinno to być coś bardzo podobnego do tego, czego potrzebujesz.

Emuluje fragmenty TextMates.Powinieneś mieć jeden fragment z tym samym tagiem powtarzanym, a edycja zrobi to, co właściwe, aktualizując ten sam tag we wszystkich lokalizacjach podczas pisania.

+0

Okazuje się, że Ayman jesteś dokładnie poprawny! Istnieje również inny skrypt o nazwie snipMate, który również to robi. Zobacz zrzut ekranu wymieniony tutaj: http://www.vim.org/scripts/script.php?script_id=2540. Jest prawie identyczny z funkcjami screencast pokazanymi w e. – Daniel

5

Możliwe, że poszukujesz trybu wizualnego w trybie blokowym, który pozwoli wstawić, usunąć itp. W kilku liniach jednocześnie.

Tryb blokowy pozwala na wybór kwadratu z kolumną i linią początkowego punktu w jednym rogu oraz bieżącą pozycję kursora definiującą kolumnę i linię drugiego rogu. To, w przeciwieństwie do wyboru opartego na linii, który jest domyślny.

CTRL-v umieści Cię w blokowym trybie wizualnym.

Jeśli masz kilka linii tak:

INSERT INTO Users VALUES(1, 'Jim'); 
INSERT INTO Users VALUES(2, 'Jack'); 
INSERT INTO Users VALUES(3, 'Joseph'); 

i chciał wstawić „0” po identyfikatorze dla każdej linii, a następnie umieścić kursor po przecinku w pierwszej linii:

INSERT INTO Users VALUES(1,* 'Jim'); 

gwiazdką reprezentujący wskaźnik sekwencji poleceń byłoby:

CTRL-v # Put into blockwise visual mode 
j  # Down a line 
j  # Down a line 
CTRL-I # Captial I for insert 
0,  # the text to insert 
Esc  # escape 

SHO tekst Teraz wyglądają one tak:

INSERT INTO Users VALUES(1, 0, 'Jim'); 
INSERT INTO Users VALUES(2, 0, 'Jack'); 
INSERT INTO Users VALUES(3, 0, 'Joseph'); 

Również w trybie wizualnym blokowym, x usunie zaznaczenie, y spowoduje jego odbicie.

: pomoc CTRL-V da dodatkową dokumentację.

+2

Ograniczeniem z CTRL-v jest to, że tylko przylega bloki, jeśli tekst, który chcesz edytować, nie jest ładnie ułożony w kolumnie, nie możesz go użyć! – Daniel

+1

Ach, w takim razie masz mnie. Istnieje wtyczka multiselect, ale nigdy jej nie użyłem: http://www.vim.org/scripts/script.php?script_id=953 –

+0

Czy to naprawdę '', a nie ''? – lindhe

8

Oto jak to pewnie edytować te poszczególne linie (istnieje wiele sposobów):

/""<enter> 
aText to replace...<esc> 
n 
. 

Najpierw wyszukiwania dla pustych cytaty umieścić kursor na pierwszej. Używając polecenia "a" (dopisz), wpisz nowy tekst, aby umieścić go w cudzysłowach. Kiedy skończysz, użyj "n" (następny), aby przejść do następnej instancji i "." (powtórz ostatnie polecenie), aby ponownie wstawić ten sam tekst. Powtórz "n". tyle razy, ile to konieczne.

Ta metoda wymaga mniej przygotowania z góry i pozwala od razu rozpocząć bez wcześniejszego określenia wszystkich lokalizacji, w których chcesz dodać tekst.

+0

To zdecydowanie dobry sposób na szybki dostęp do tekstu. Jednak nie jest to przykład jednoczesnej edycji w taki sam sposób, w jaki e robi to. Być może jest to "vim" sposób robienia rzeczy (i jak wskazano, ma tę zaletę, że nie musisz znać wszystkich miejsc przed czasem). – Daniel

+1

Vim nie może wykonywać jednoczesnych edycji (możliwe, że można je emulować poprzez vimscript). Ustanowienie powtarzalnego polecenia to trochę więcej pracy IMO, ale jest to sposób na zrobienie tego Vim. – Svend

+0

Chcę dodać, że polecenie w drugiej linii może być dowolną inną czynnością vima, taką jak: 5x, i

2

Dla przykładu użyłbym podstawienie:

:%s/class=""/class="something"/g 
+0

Dzięki za odpowiedź! Jednak moje pytanie nie dotyczy znalezienia rozwiązania na pewno spreparowany przykład, ale faktycznie o rozwiązanie tego problemu przy użyciu jednoczesnej edycji. – Daniel

0

Szukam również czegoś takiego, a dokładniej bardzo przydatnej funkcjonalności ze ST2, w której naciska się CTRL + D, aby wybrać kolejne wystąpienie, a następnie zamień oba wystąpienia, po prostu wpisując je.

Powiązane problemy