1

使用 Vim 我试图将光标移动到代码块的中间,但我不知道该怎么做:

//cursor is for instance here.

{
    //or here

    //some code
    // .... **** move cursor here ****
    //some more code 

}

最后的想法是有一个快捷方式,保存当前位置,将光标移动到代码块中间,将当前行设置到屏幕中间(用快捷方式“zz”),然后移回保存的位置。

我更喜欢内置的 vim 功能,但插件也可以。

编辑:这是用于 c++ 的,所以我希望它用于括号 {}。

4

3 回答 3

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>
于 2013-03-28T14:13:42.520 回答
1

更多的是通用解决方案,但可能有用 - easy-motion插件可让您以极高的精度在整个地方跳跃。

例如:

初始状态

<Leader><Leader>w(默认) - '词动'

字动作启用

g

光标在中间

然后跳回来,你只需向后做同样的事情(在这种情况下,<Leader><Leader>b g.

这不会将当前行设置到屏幕中间,尽管您可以:set scrolloff=9999让屏幕中间跟随光标。

于 2013-03-28T13:51:49.210 回答
0

这不会给你你想要的东西,但它会在屏幕上获得函数的文本(假设它不是太长)。

  1. ma- 在当前光标位置设置一个标记。
  2. 反复按}(向前跳一段),直到您可以看到您想要的代码。
  3. `a- 返回到您设置的标记。

vim 术语中的“段落”是一组连续的非空行。这是代码块的一个很好的近似值。另请注意,您可以将任何字母用于标记命令,因此一次最多可以有 52 个处于活动状态。

于 2013-03-28T14:10:23.640 回答