optymalizuj otoczenie za pomocą cudzysłowów

Dec 22 2020

Chcę ująć słowo w cudzysłów

Oto mój zestaw poleceń:

  • ciw
  • wtedy kiedy jestem w trybie wstawiania, piszę '(używam
    rozszerzenia vim w kodzie Visual, więc dostaję dwa 'nie wiem, czy tak jest w przypadku "normalnego" vima)
  • następnie Ctrl+ C+t
  • następnie p

Działa, ale może istnieć krótsza wersja, aby to osiągnąć. Mógłbyś pomóc ?

Odpowiedzi

2 Macunaíma Dec 22 2020 at 20:54

Możesz spróbować wtyczki vim-surround . Aby umieścić słowo w cudzysłowie, pójdziesz ysiw'. Wtyczka umożliwia:

  • dodaj ( ysiw")

    word -> "word"
    
  • zmiana ( csiw"')

    'word'
    
  • usuń ( ds')

    word
    

otoczenie nie tylko pojedynczych słów, ale wszelkiego rodzaju obiektów tekstowych:

  • otaczaj słowa w nawiasach ( ysi)")

    def func(some sequence of words) -> def func("some sequence of words")
    
  • zamień nawiasy na nawiasy kwadratowe ( cs)])

    list = (var1, var2, var3) -> list = [var1, var2, var3] 
    
2 BLayer Dec 22 2020 at 20:43

Jeśli używasz rozszerzenia VS Code, które myślę, że jesteś, to rozumiem, że obsługuje przynajmniej niektóre wtyczki, a jedna z nich to vim-surround . Jeśli tak jest i jesteś otwarty na używanie wtyczek, po prostu przejdź do ostatniego akapitu. W przeciwnym razie czytaj dalej.

W trybie normalnym z kursorem na pierwszym znaku słowa możesz zrobić ...

i"<C-O>f<Space>"<Esc>

Ctrl-O, z Insert, wprowadźmy jedno polecenie trybu normalnego przed powrotem do Insert.

f<Space> przechodzi do następnego znaku spacji w linii (po słowie).

Problem z tym polega na tym, że po słowie nie ma spacji (np. Jesteś na końcu wiersza lub po nim następuje znak interpunkcyjny). Musisz dostosować polecenie trybu normalnego (np. Na f.lub $<Left>).

To tylko jeden przykład, jak to osiągnąć, ale myślę, że zamiast próbować optymalizować ręczne polecenie, powinieneś użyć czegoś bardziej niezawodnego (ale skomplikowanego) i umieścić to w mapowaniu. Na przykład to polecenie podstawienia:

:%s/\<\w*\%#\w*\>/"&"

Oznacza to, że weź pozycję kursora ( \%#) i wszystkie otaczające go znaki słowne (oba \w*) i zastąp je sobą w cudzysłowie.

Mapowanie trybu normalnego dla tego:

:nnoremap <leader>q :%s/\<\w*\%#\w*\>/"&"<CR>

Teraz zoptymalizowałeś wszystko do naciśnięcia klawisza lub dwóch ... niezależnie od długości wybranego mapowania.

Naprawdę zasugerowałbym jednak, abyś po prostu zdobył wtyczkę vim-surround . Następnie możesz łatwo zawijać słowa (i nie tylko) czymkolwiek, czym zwykle zawijasz słowa (np. Parens).