İmleci geçerli satırın ortasına nasıl taşıyabilirim?


17

İmlecimi geçerli satırın ortasına getirebilmemin bir yolu var mı? (metin satırının ortası - ekran genişliğinin ortası değil)

Mİmleci ekranın ortasına taşıyan kısayolun olup olmadığını merak ediyordum .

EDIT : Parantez içine açıklama eklendi


2
Tam çizginin ortası mı yoksa ekran genişliğinin ortası mı?
muru

@muru Tam çizginin ortasında düşünüyordum
thameera

2
Bunu soruya da ekleyebilir misiniz? Ve sargı ile ne olmasını bekliyorsunuz?
muru

Yanıtlar:


16

Bunu yapmanın yerleşik bir yolunu bilmiyorum, ancak bunu yapmak için kolayca bir haritanız olabilir:

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

@Ingo Karkat, VISUAL modunda da çalışan aşağıdaki varyantı önerdi.

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

Ne yazık ki SELECT modunda da tetikleniyor. Sonuç olarak, çifti tercih ederim:

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

3
Bu varyant ayrıca görsel mod için de doğru şekilde çalışacaktır:noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Ingo Karkat

15

Yerleşik gmaynen bunu yapar.


7
Bunun sizi çizgi uzunluğuna göre değil , konsol genişliğine göre çizginin ortasına götürdüğünü unutmayın . Bu nedenle, 10 karakterlik bir satırınız ve 80 karakter genişliğinde bir konsolunuz varsa, imleç satırın 10. karakterine ulaşacaktır (çünkü 40'a ulaşmaya çalışmaktadır).
apnorton

3
Evet. Sorudan, çizginin ortasını mı yoksa ekranın ortasını mı aradığımız belli değil. MBen benzetmeye göre , ekran varsaydım.
tommcdo

1
Aslında bunu 80 karakterlik metinle geniş (yaklaşık 180 karakter) ekranda denedim. İmleç satırın sonuna gitti . Çok kullanışlı bir komut gibi görünmüyor.
Ben

@Ben Satırın sonuna mı gitti, yoksa ekran genişliğinin merkezine olabildiğince yakın mı gitti? Ekranın% 50'sinden daha geniş bir çizgiyle deneyin veya ile deneyin :set virtualedit=all.
8bittree

Evet, ancak OP ekranın ortasına değil, satır metninin ortasına atlamak için bir komut istiyordu. Yani soruya cevap vermiyor.
Ben

3

Luc'un cevabına eklemek için, hızlı bir şekilde belirli bir konuma geçmeyi bir esinti yapan Easymotion eklentisi de var . <Leader><Leader>wTuşuna basıldığında , belirli bir kelimeye gitmek için hangi tuşa basabileceğiniz vurgulanır. Bu şekilde, mevcut satırın ortasındaki bir kelimeye kolayca geçebilirsiniz.


1

Metnin ortasına gitmek istiyorsanız (satırın başındaki boşluk dikkate alınmazsa), bu işe yarayacaktır:

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>

Ancak bunun görsel modda çalışacağını düşünmüyorum.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.