Czy można zdefiniować w vimie obiekt tekstowy, który będzie działał na prostokątnym obszarze?
Załóżmy na przykład, że mam wyrównane pionowo kolumny tekstu, takie jak to:
column 1 co column 2 col
lumn 1 colu umn 2 column
mn 1 column 2 column 2 c
1 column 1 olumn 2 colu
Byłoby możliwe do zdefiniowania textobject c
dla kolumn, tak, że dac
będzie usunąć kolumnę, yac
by go szarpać, cac
by go zmienić, i tak dalej?
(Wiem o Control-V do wybierania regionu prostokątnego i wiem, że możesz użyć d
, y
itp., Aby usunąć, szarpać itp. Wybrany region. Ale jestem szczególnie ciekawy, co jest możliwe przy użyciu obiektów tekstowych.)
cursor-motions
custom-text-object
Leah Velleman
źródło
źródło
Odpowiedzi:
Tak, jest to możliwe. @PeterRincker sugeruje wtyczki textobj-word-kolumnę , która definiuje cztery obiekty tekstowe (
ic
,ac
,iC
, iaC
) dla kolumn opartych na słowo.Ideą tej funkcji jest stworzenie funkcji, która definiuje ruch oparty na kolumnie, a następnie odpowiednie mapowanie tej funkcji do mapowań trybu wizualnego / wyboru i mapowań oczekujących operatora. Aby użyć wyżej wymienionej wtyczki jako przykładu, tworzy ona następujące mapowania:
Tutaj
TextObjWordBasedColumn(...)
definiuje ruch kolumny i jest mapowany zarówno do trybu wizualnego / wyboru za pomocą, jakxnoremap
i trybu oczekiwania operatora za pomocąonoremap
. Zauważ, że funkcja jest nieco złożona, aby obsłużyć indendację i znaleźć odpowiednie granice ruchu.źródło
Czy to możliwe? Absolutnie! Przypadek i punkt: textobj-word-column.vim .
Jak tworzyć własne obiekty tekstowe
Zwykle tryb wizualny służy do tworzenia nowego obiektu tekstowego. Tryb wizualny może być liniowy, znakowy (zazwyczaj) lub blok wizualny. Oto podstawy tego, czego będziesz potrzebować:
a{char}
lubi{char}
gdzie{char}
jest zarówno opisowa, jak i nieużywana. np.i/
jako przykładowy obiekt tekstowy między/
's.T/
t/
v
xnoremap
.onoremap
i:normal
.Teraz przykład naszego prostego,
i/
który tworzy obiekt tekstowy między/
:Tak długo, jak postępujesz zgodnie z podstawowymi składnikami, możesz tworzyć obiekty tekstowe do wszelkiego rodzaju rzeczy.
Zaawansowane tworzenie obiektów tekstowych za pomocą vim-textobj-user
Vim-textobj użytkownik Wtyczka zapewnia wspólny sposób definiowania niestandardowych obiektów tekstowych w bardziej deklaratywny mody. Na przykład tutaj jest obiekt tekstowy znacznika php:
Aby uzyskać więcej pomocy vim-textobj użytkownikowi zobaczyć jego pomocą doc:
:h textobj-user-introduction
.Aby uzyskać więcej pomocy
Jak również strona wiki Tworzenie nowych obiektów tekstowych Vim.
źródło