Как мне переместить курсор в центр текущей строки?


17

Есть ли способ, которым я могу переместить курсор в середину текущей строки? (середина строки текста - не середина ширины экрана)

Мне было интересно, есть ли ярлык, аналогичный тому, Mкоторый перемещает курсор в середину экрана.

РЕДАКТИРОВАТЬ : Добавлено пояснение в скобках


2
Так середина полной строки или середина ширины экрана?
Муру

@muru Думал о середине полной строки
thameera

2
Не могли бы вы добавить это и к вопросу? А что вы ожидаете от упаковки?
Муру

Ответы:


16

Я не знаю какой-либо встроенный способ сделать это, однако, вы можете легко иметь карту, чтобы сделать это:

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

@ Инго Каркат предложил следующий вариант, который также работает в 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>'
Инго Каркат

15

Встроенный gmделает именно это.


7
Обратите внимание, что это приведет вас к середине строки относительно ширины консоли , а не относительно длины линии . Итак, если у вас есть строка из 10 символов и консоль шириной 80 символов, курсор окажется на 10-м символе в строке (потому что он «пытается» добраться до 40-го), а не на 5-м.
Апнортон

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.