Як перемістити курсор до центру поточного рядка?


17

Чи є спосіб перенести курсор на середину поточного рядка? (середина рядка тексту - не середина ширини екрана)

Мені було цікаво, чи є ярлик, схожий на Mте, що переміщує курсор до середини екрана.

EDIT : Додано уточнення всередині дужок


2
Тож середня середина повної лінії чи середина ширини екрана?
муру

@muru Думав про середину повної лінії
thameera

2
Чи можете ви додати це до питання? А що ви очікуєте, що станеться з обгортанням?
муру

Відповіді:


16

Я не знаю жодного вбудованого способу зробити це, однак, ви можете легко створити карту для цього:

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

@Ingo Karkat запропонував наступний варіант, який також працює у VISUAL-режимі.

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

На жаль, він також спрацьовує в режимі SELECT. Як наслідок, я віддаю перевагу парі:

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

3
Цей варіант також буде правильно працювати у візуальному режимі:noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Ingo Karkat

15

Вбудований gmробить саме це.


7
Зауважте, що це приведе вас до середини лінії щодо ширини консолі , а не щодо довжини лінії . Отже, якщо у вас є рядок з 10 символів і консоль шириною 80 символів, курсор виявиться на 10-му символі в рядку (тому що "намагається" дістатися до 40-го), а не на 5-му.
apnorton

3
Так. З питання не зрозуміло, шукаємо ми середину рядка чи середину екрана. На основі аналогії до M, я припустив, що екран.
tommcdo

1
Насправді я просто спробував це на широкому (близько 180 символів) екрані з 80-знаковим текстом. Курсор пішов до кінця рядка. Не здається дуже корисною командою.
Бен

@Ben Чи пішов він до кінця рядка чи пройшов так близько до центру ширини екрану, як міг отримати? Спробуйте це з лінією, яка на 50% ширше екрана, або спробуйте :set virtualedit=all.
8bittree

Так, але ОП просила команду перейти до середини рядка, а не до середини екрана. Тож це не відповідає на питання.
Бен

3

Щоб додати відповідь Люка, є також плагін Easymotion , який робить швидкий перехід до певної позиції легким вітром. Якщо натиснути, <Leader><Leader>wбуде виділено, яку клавішу можна натиснути, щоб перейти до певного слова. Таким чином ви могли легко перейти до слова в середині поточного рядка.


1

Якщо ви хочете перейти до середини тексту (не беручи до уваги пробіл на початку рядка), це спрацює:

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>

Я не думаю, що це буде працювати у візуальному режимі.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.