Czy istnieje obiekt tekstowy dla bieżącej linii?

Odpowiedzi:

13

Oto surowe „tekstowe” obiekty tekstowe:

xnoremap il g_o0
onoremap il :normal vil<CR>
xnoremap al $o0
onoremap al :normal val<CR>

I prymitywny „bufor” obiekt tekstowy:

xnoremap i% GoggV
onoremap i% :normal vi%<CR>

---EDYTOWAĆ---

Określenie „podmiot” jest poleceniem, że nic nie robi sama w sobie: d, y, itd.

Naciśnięcie tych klawiszy wprowadza cię w „tryb oczekiwania operatora”, gdzie Vim czeka, aż powiesz mu, na czym ma działać… z „ruchem operatora”.

Możesz użyć :omaplub, :onoremapaby zdefiniować niestandardowe ruchy oczekujące na operatora. Zastosowana tutaj technika jest inspirowana :help omap-info:

  1. definiujesz mapowanie w trybie wizualnym obejmujące pożądany obszar,
  2. używasz tego mapowania w mapowaniu oczekującym na operatora.

Zauważ, że użyłem :onoremapdlatego il, ali i%nie istnieje. Jeśli są nadrzędne istniejący ruch lub tekstowych obiektu - mówią ip- trzeba użyć rekurencyjnej mapowanie: :omap.

:help :map-operator opisuje nieco bardziej zaawansowaną metodę.

Zobacz :help v_ona ow trybie wizualnym.

romainl
źródło
Fajne. Czy mógłbyś wyjaśnić kilka jego fragmentów? Co to jest o(tryb oczekiwania operatora) w onoremap? Co robi ow trybie wizualnym? Domyślam się, że jest to „druga strona”, ponieważ wydaje się, że przeskakuje na drugą stronę zaznaczenia ... Jak się :hna nim znaleźć ? Nie mogę tego znaleźć przy pomocy :h x_olub :h o.
lip
Dodano wyjaśnienie.
romainl
1

Sugerowałbym dodatkowe rozwiązanie, aby użyć ^ zamiast 0 (więc linia zaczyna się na początku pierwszego znaku:

xnoremap il g_o^
onoremap il :normal vil<CR>
xnoremap al $o^
onoremap al :normal val<CR>

W ten sposób, jeśli wykonamy „zmianę w linii”, przestrzega poziomu wcięcia.

Blasco
źródło
Istnieje również plugin zapewnienie tej funkcji przez vim wzorcowej Kana: github.com/kana/vim-textobj-line/blob/master/doc/...
Blasco