如何将光标移动到当前行的中心?


17

有什么方法可以将光标移动到当前行的中间吗?(文本行的中间-不在屏幕宽度的中间)

我想知道是否有类似于M将光标移动到屏幕中间的快捷方式。

编辑:在括号内添加了说明


2
那么,是实线的中间还是屏幕宽度的中间?
muru

@muru正在考虑全线的中间位置
thameera,2015年

2
您也可以将其添加到问题中吗?您希望包裹发生什么?
muru

Answers:


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,2015年

15

内置程序gm正是这样做的。


7
请注意,这会将您带到相对于控制台宽度而不是相对于线长的中间位置。因此,如果一行包含10个字符,并且控制台的宽度为80个字符,则光标将最终显示在该行的第10个字符上(因为它是“尝试”到第40个字符),而不是第5个字符。
apnorton 2015年

3
是的 从这个问题来看,我们是在寻找行中间还是在屏幕中间尚不清楚。基于类推M,我假设是屏幕。
tommcdo

1
实际上,我只是在宽屏(约180个字符)和80个字符的文本上尝试过此操作。光标移至该行的末尾。似乎不是一个非常有用的命令。
2015年

@Ben它是否到达了行尾,或者是否尽可能接近屏幕宽度的中心?尝试使用比屏幕宽50%以上的线,或尝试使用:set virtualedit=all
8bittree '17

是的,但是OP要求一个命令跳转到行文本的中间,而不是屏幕的中间。因此它无法回答问题。

3

为了增加Luc的答案,还提供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>

但是,我认为这不会在可视模式下起作用。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.