Jak przesunąć kursor na środek bieżącej linii?


17

Czy istnieje sposób na przesunięcie kursora na środek bieżącej linii? (środek linii tekstu - nie środek szerokości ekranu)

Zastanawiałem się, czy istnieje skrót podobny do Mtego, który przesuwa kursor na środek ekranu.

EDYCJA : Dodano wyjaśnienie w nawiasach


2
Czy więc środek środka pełnej linii czy środek szerokości ekranu?
muru

@muru Myślałem o środku pełnej linii
thameera

2
Czy możesz dodać to również do pytania? A czego oczekujesz od pakowania?
muru

Odpowiedzi:


16

Nie znam żadnego wbudowanego sposobu, aby to zrobić, jednak możesz łatwo mieć mapę, aby to zrobić:

nnoremap µ :exe 'normal! '.(virtcol('$')/2).'\|'<cr>

@Ingo Karkat zaproponował następujący wariant, który działa również w trybie VISUAL.

noremap <expr> gM (virtcol('$') / 2) . '<Bar>'

Niestety jest on również uruchamiany w trybie SELECT. W związku z tym wolę parę:

nnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'
xnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'

3
Ten wariant działa również poprawnie w trybie wizualnym:noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Ingo Karkat

15

Wbudowane gmrobi dokładnie to.


7
Zauważ, że prowadzi to do środka linii w odniesieniu do szerokości konsoli , a nie w odniesieniu do długości linii . Tak więc, jeśli masz linię 10 znaków i konsolę o szerokości 80 znaków, kursor kończy się na 10 znaku w linii (ponieważ „próbuje” dostać się do 40), a nie piątym.
apnorton

3
Tak. Z pytania nie wynika, czy szukamy środka linii, czy środka ekranu. Bazując na analogii do M, założyłem ekran.
tommcdo

1
Właśnie próbowałem tego na szerokim (około 180 znaków) ekranie z tekstem 80 znaków. Kursor przeszedł na koniec linii. Nie wydaje się to bardzo przydatnym poleceniem.
Ben

@Ben Czy dotarł do końca linii, czy też znalazł się tak blisko środka szerokości ekranu, jak to możliwe? Wypróbuj z linią o szerokości większej niż 50% szerokości ekranu lub wypróbuj :set virtualedit=all.
8bittree,

Tak, ale OP poprosił o polecenie przeskoczenia na środek tekstu wiersza, a nie na środek ekranu. Więc to nie odpowiada na pytanie.
Ben

3

Aby dodać do odpowiedzi Luca, dostępna jest również wtyczka Easymotion , która sprawia, że ​​szybkie przejście do określonej pozycji jest dziecinnie proste. Naciśnięcie <Leader><Leader>wspowoduje podświetlenie klawisza, który można nacisnąć, aby przejść do określonego słowa. W ten sposób możesz łatwo przejść do słowa na środku bieżącego wiersza.


1

Jeśli chcesz przejść do środka tekstu (nie uwzględniając białych znaków na początku wiersza), zadziała to:

function! s:Gm()
  execute 'normal! ^'
  let first_col = virtcol('.')
  execute 'normal! g_'
  let last_col  = virtcol('.')
  execute 'normal! ' . (first_col + last_col) / 2 . '|'
endfunction
nnoremap <silent> gm :call <SID>Gm()<CR>

Nie sądzę jednak, aby działało to w trybie wizualnym.


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.