Przejdź do środka linii w vimie

14

Wiem, że 0 idzie na początek linii i $ idzie na koniec, ale czy jest coś na środku?

teggy
źródło

Odpowiedzi:

11
:call cursor(0, len(getline('.'))/2)
efemeryczny
źródło
4
Byłoby to całkiem przydatne, gdyby zostało zmapowane, np .::: nnoremap gm: wywołanie kursora (0, len (getline ('.')) / 2) <cr>
Heptite
3
Wystarczy virtcol („$”) / 2.
Luc Hermitte
@Luc Hermitte: Ładne, ale nie do końca najlepsze zachowanie, gdy w grę wchodzą twarde karty.
ephemient
Dlatego używam virtcol zamiast col. :) Ale rzeczywiście powinniśmy użyć | a nie kursor (). BTW, len () nie da lepszego wyniku. Ponadto len spowoduje inne problemy ze znakami wielobajtowymi.
Luc Hermitte
8

Pisanie gmby to zrobiło, ale porusza się po liniach ekranu (patrz :help gm). Aby działał z liniami tekstowymi, można ponownie przypisać to polecenie:

map gm :call cursor(0, virtcol('$')/2)<CR>
JooMing
źródło
gm wydaje się przesuwać kursor na środek ekranu, ale jeśli moja linia tekstu jest krótsza niż długość ekranu, nie przenosi mnie na środek. Przepraszamy za brak wyjaśnień.
teggy
@teggy: Rozumiem. Zmodyfikowałem swoje rozwiązanie, aby zmienić mapowanie gm, aby przejść do środka wiersza tekstu. Jak widać łączy w sobie rozwiązania Ephemient i Luca Hermitte'a.
JooMing
Jak wskazał ephemient, nadal występuje problem z twardymi tarbami, ponieważ kursor () liczy je jako jeden znak każdy. Co więcej, nie będzie również działać ze znakami wielobajtowymi.
Luc Hermitte
7

Oto rozwiązanie, które będzie respektować zarówno tabele twarde, jak i znaki wielobajtowe.

:exe 'normal '.(virtcol('$')/2).'|'
Luc Hermitte
źródło
1

Oto najlepsze rozwiązanie, jakie znalazłem. Skakanie dokładnie na środek linii nie jest zbyt praktyczne. Najprawdopodobniej nadal będziesz musiał przesunąć kursor o kilka pozycji po przejściu na środek. Co jeśli możesz przeskoczyć do konkretnej postaci? Wiele osób po prostu szuka postaci, a następnie naciska „Dalej”, aż do niej dotrze. To jest powolne. Wtyczka Easy-motion oferuje lepsze rozwiązanie.

Moim ulubionym jest <leader><leader>spostać, na którą chcesz skakać. Easy Motion zastępuje wszystkie mecze różnymi literami do wyboru. Zobacz samouczek. To zmieniająca życie wtyczka ...

Sam Ruberti
źródło