我想知道是否存在类似于M的快捷方式将光标移动到屏幕中间。
编辑:在括号内添加了说明
#1 楼
我不知道有任何内置方法可以执行此操作,但是,您可以轻松地制作一个地图: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>'
评论
此变体也将在可视模式下正常工作:noremap
– Ingo Karkat
15年5月13日在18:16
#2 楼
内置的gm
可以做到这一点。评论
请注意,这会将您带到相对于控制台宽度(而不是相对于线长)的中间位置。因此,如果一行包含10个字符,并且控制台的宽度为80个字符,则光标将最终显示在该行的第10个字符上(因为它是“尝试”到第40个字符),而不是第5个字符。
– Apnorton
2015年3月10日14:29
是的从这个问题来看,不清楚是在寻找行的中间还是在屏幕的中间。基于与M的类比,我假设是屏幕。
–tommcdo
2015年3月10日14:32
实际上,我只是在宽屏幕(约180个字符)上尝试了此操作,并显示了80个字符的文本。光标移至该行的末尾。似乎不是一个非常有用的命令。
–本
15年3月12日在13:47
@Ben是否到达了行尾,或者是否尽可能靠近屏幕宽度的中心?尝试使用比屏幕宽50%以上的线,或使用:set virtualedit = all尝试。
– 8bittree
17年9月21日在19:51
是的,但是OP要求跳转到行文本中间而不是屏幕中间的命令。因此它无法回答问题。
–本
17年9月22日在4:21
#3 楼
为了增加Luc的答案,还提供Easymotion插件,该插件使轻而易举地快速移动到特定位置。按<Leader><Leader>w
将突出显示您可以按哪个键移动到特定单词。这样,您可以轻松地移至当前行中间的单词。#4 楼
gM
将光标移至行文本的一半:https://vimhelp.org/motion.txt.html#gM
这已于2019年10月实现:
https://github.com/manuelschiller/vim/commit/a267c57acdd8843a91eed2cede6ef02d970147fd
#5 楼
如果您想转到文本的中间(不考虑行首的空白),则可以使用: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>
我不认为这在可视模式下不会起作用。
评论
那是整行的中间还是屏幕宽度的中间?@muru正在考虑整行的中间
您也可以将其添加到问题中吗?您希望包裹处理会发生什么?