Jak osiągnąć wybór różnej długości tekstów w różnych wierszach?


10

zakładam, że mam następujące teksty:

aaa-dd-e: „aaa”,
bb-x: „bb”,
c-9: „c”

Chcę dokonać wyboru jak poniżej:

aaa-dd-e:„aaa”,
bb-x:„bb”,
c-9:„c”

Próbowałem użyć cv do utworzenia bloku wizualnego, ale po utworzeniu zaznaczenia w pierwszej kolumnie i naciśnięciu „f:” (chciałem rozszerzyć zaznaczenie do znaku dwukropka w każdej linii jak wyżej), otrzymuję:

aaa-dd-e: „aaa”,:
bb-x„bb”,
c-9:„c”

zaznaczenie zatrzymuje się na pierwszym dwukropku i tworzy prostokąt.


6
Co chcesz osiągnąć dzięki tej selekcji, może istnieć inny sposób
— Arjen Dijkstra

Jeśli jest oddzielony znakami, możesz najpierw spróbować ponownie wyrównać blok, a następnie wybierz go. Zobacz: Wyrównaj tekst tylko na pierwszym separatorze w VIM
— kenorb

Odpowiedzi:


6

Selekcja jest na ogół środkiem do celu, tym bardziej w Vimie, w którym selekcja często nie jest konieczna.

Zakładając, że nadal chcesz umieszczać cudzysłowy wokół nazw właściwości w pliku innym niż JSON, aby przekształcić go we właściwy JSON:

  1. wybierz linie do modyfikacji, znakowo lub liniowo, to nie ma znaczenia,
  2. :'<,'>norm I"^[f:i"( '<,'>jest automatycznie wstawiany i ^[uzyskiwany za pomocą <C-v><Esc>).

Jeśli masz piękną wtyczkę surround, krok 2 staje się:

:'<,'>norm ^vt:S"

Po podstawieniu krok 2 może stać się:

:'<,'>s/^\s*\([^:]*\):/"\1"

macie rację, teraz uważam, że selekcja wizualna prawdopodobnie nie jest konieczna. z pomocą lub :g/regex/normmogę po prostu osiągnąć wszystko, co chcę zrobić.
— Aaron Shen

Czy jest jakiś sposób na umieszczenie całego zaznaczonego bloku w schowku systemowym i wklejenie go w innym pliku?
— Aaron Shen

Oczywiście. Zakładając, że Twój Vim jest skompilowany z obsługą schowka, którą możesz zrobić "+ylub "*y, w zależności od schowka, na który chcesz celować. Tutaj jest wiele powiązanych pytań.
— romainl

14

Vim obsługuje tylko prostokątne zaznaczenia blokowe, z wyjątkiem poszarpanej prawej ramki po naciśnięciu $.

Istnieją wtyczki (takie jak wiele kursorów vim ), które mogą emulować wiele wyborów, ale powinieneś być w stanie osiągnąć swój rzeczywisty cel (o którym niestety nie wspomniałeś) za pomocą czystych poleceń Vima, na przykład :globali :substitute(jeśli możesz sformułować regularny wyrażenie pasujące do zaznaczenia w każdym wierszu) lub przez powtarzanie makr (jeśli istnieje określony ruch, który obejmuje zaznaczenie w każdym wierszu).


co jeśli chcę wyciąć te linie i wkleić do innego bufora?
— Aaron Shen

1

Aby rzucić kolejny pierścień na pierścień, jeśli naprawdę chcesz użyć selekcji wizualnej, możesz użyć wtyczki Tabular do wyrównania dwukropków, a następnie dokonać selekcji wizualnej.

Jeśli weźmiesz oryginalny tekst:

aaa-dd-e: "aaa",
bb-x: "bb",
c-9: "c"

:Tab /:\zs wyrówna wszystko po dwukropku, jak poniżej

aaa-dd-e:  "aaa",
bb-x:      "bb",
c-9:       "c"

Następnie możesz dokonać wizualnego wyboru bloku.

Jednak, jak powiedzieli inni, selekcja wizualna prawdopodobnie nie jest konieczna w tej sytuacji. Używanie normlub zastępowanie może prawdopodobnie osiągnąć to, czego chcesz, bez kłopotów z selekcjami wizualnymi.


1

Znalazłem rozwiązanie tego problemu, który jest zaskakująco prosty! Uruchom tryb blokowania wizualnego od dołu zaznaczenia tekstu, który chcesz skopiować, i wybierz w górę! Będzie powiększał blok w miarę wchodzenia w górę, a jeśli podświetlisz w dół, wydaje się, że wybór jest mniejszy.


Ale w ten sposób zawsze będzie to prostokątny blok, prawda? Gdy czytam, OP nie chce tego (wspominają, że próbowali trybu blokowania wizualnego).
— Martin Tournoij

Nie. Zawsze będzie prostokątny blok, jeśli wszystkie linie będą tej samej długości. Przekonałem się, że rozpoczęcie od dołu i wyróżnienie w górę, a następnie naciśnięcie $, aby przejść do końca linii, spowoduje, że wszystkie podświetlone linie zostaną podświetlone do końca linii.
— Arthur Bowers,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.