使用Vim我试图将光标移动到代码块的中间,但我无法弄清楚如何执行此操作:
//cursor is for instance here.
{
//or here
//some code
// .... **** move cursor here ****
//some more code
}
最后的想法是有一个保存当前位置的快捷方式,将光标移动到代码块的中间,将当前行设置到屏幕中间(使用快捷键“zz”),然后移动回到保存的位置。
我更喜欢内置的vim功能,但插件也可以。
编辑:这是针对c ++的,所以我希望它用于方括号{}。
答案 0 :(得分:4)
我给了它一个(快速和肮脏)去:
function! Middleize()
" use ]M to jump to either the end of the current method if we are in it
" or the start of the next method if we are above the method
normal! ]M
" we record the current line number
let first_line = line('.')
" we go to the other end of the method
normal! %
" we record the current line number
let second_line = line('.')
" we started either from the top or from the bottom of the method
" so we have to take that into account when calculating the number
" of the line we want to jump to
if first_line < second_line
let middle_line = first_line + ((second_line - first_line) / 2)
else
let middle_line = ((first_line - second_line) / 2) + second_line
endif
" let's go!
execute "normal! " . middle_line . "Gzz"
endfunction
nnoremap <F5> :call Middleize()<CR>
答案 1 :(得分:1)
更多通用解决方案但可能有用 - easy-motion插件允许您以极高的精度跳过整个地方。
例如:
<Leader><Leader>w
(默认) - “word motion”
g
然后跳回来,你只是向后做同样的事情(在这种情况下,<Leader><Leader>b g
。
这不会将当前行设置为屏幕中间,但您可以:set scrolloff=9999
让屏幕中间跟随光标。
答案 2 :(得分:0)
这不会给你你想要的东西,但它会在屏幕上显示该功能的文本(假设它不会太长)。
vim术语中的“段落”是一组连续的非空行。这是代码块的一个很好的近似值。另请注意,您可以使用任何字母作为mark命令,因此最多可以同时激活其中52个。