Bagaimana cara memindahkan kursor ke tengah garis saat ini?


17

Apakah ada cara saya bisa memindahkan kursor ke tengah garis saat ini? (tengah garis teks - bukan tengah lebar layar)

Saya bertanya-tanya apakah ada jalan pintas yang mirip dengan Myang memindahkan kursor ke tengah layar.

EDIT : Menambahkan klarifikasi di dalam tanda kurung


2
Jadi apakah tengah tengah dari garis penuh atau tengah dari lebar layar?
muru

@muru Sedang memikirkan garis penuh
thameera

2
Bisakah Anda menambahkan itu ke pertanyaan juga? Dan apa yang Anda harapkan terjadi dengan pembungkus?
muru

Jawaban:


16

Saya tidak tahu cara apa pun untuk melakukan ini, namun, Anda dapat dengan mudah memiliki peta untuk melakukannya:

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

@Ingo Karkat mengusulkan varian berikut yang juga berfungsi dalam mode VISUAL.

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

Sayangnya, ini juga dipicu dalam mode SELECT. Sebagai konsekuensinya, saya lebih suka pasangan:

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

3
Varian ini juga akan berfungsi dengan benar untuk mode visual:noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Ingo Karkat

15

Built-in gmmelakukan hal ini.


7
Perhatikan bahwa ini akan membawa Anda ke tengah garis sehubungan dengan lebar konsol , bukan sehubungan dengan panjang garis . Jadi, jika Anda memiliki garis 10 karakter dan konsol yang lebar 80 karakter, kursor akan berakhir pada karakter ke-10 di baris (karena itu "berusaha" untuk mendapatkan ke-40), bukan ke-5.
apnorton

3
Ya. Dari pertanyaan, tidak jelas apakah kita mencari tengah garis atau tengah layar. Berdasarkan analogi untuk M, saya mengasumsikan layar.
tommcdo

1
Sebenarnya saya hanya mencoba ini di layar lebar (sekitar 180 karakter) dengan teks 80-char. Kursor pergi ke akhir baris. Tampaknya bukan perintah yang sangat berguna.
Ben

@ Ben Apakah ia pergi ke ujung garis, atau apakah ia pergi sedekat mungkin dengan bagian tengah dari lebar layar? Cobalah dengan garis yang lebih dari 50% selebar layar, atau coba dengan :set virtualedit=all.
8bittree

Ya tapi OP meminta perintah untuk melompat ke tengah teks baris, bukan tengah layar. Jadi itu tidak menjawab pertanyaan.
Ben

3

Untuk menambah jawaban Luc, ada juga plugin Easymotion , yang membuat bergerak cepat ke posisi tertentu menjadi mudah. Menekan <Leader><Leader>wakan menyorot tombol mana yang dapat Anda tekan untuk pindah ke kata tertentu. Dengan begitu Anda bisa dengan mudah berpindah ke sebuah kata di tengah baris saat ini.


1

Jika Anda ingin pergi ke tengah teks (tidak memperhitungkan spasi putih di awal baris), ini akan berfungsi:

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>

Saya tidak berpikir ini akan bekerja dalam mode visual.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.