2013-03-28 3 views
1

Использование Vim Я пытаюсь переместить курсор в середине блока кода, но я не могу понять, как это сделать:Переместить в середине блока кода

//cursor is for instance here. 

{ 
    //or here 

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

} 

Окончательный идея состоит в том, чтобы иметь ярлык, который сохраняет текущую позицию, перемещает курсор в середине блока кода, устанавливает текущую строку в середину экрана (с ярлыком «zz»), а затем возвращается в сохраненную позицию ,

Я бы предпочел встроенную функцию vim, но также работает плагин.

EDIT: Это для C++, и поэтому я хочу его для скобок {}.

+1

пожалуйста определить «середину блока кода» – Kent

+1

хотите ли вы агностик решение языка? Или что-то, что использует маркеры '{}' как '? Что вы попробовали? – romainl

+0

Извините, я забыл, что редактировал вопрос. – b3nj1

ответ

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> 
+0

Я думаю, что это может быть ответ. Я тоже собирался решить такое решение, но я пропустил знание vim, чтобы написать его, поэтому большое спасибо! Я попробую, и немного настрою его. Спасибо чувак :) – b3nj1

1

Больше общего решения, но может быть полезно - плагин easy-motion позволяет вам прыгать повсюду с большой точностью.

Например:

initial state

<Leader><Leader>w (по умолчанию) - 'word motion'

word motion enabled

g

cursor in the middle

Затем, чтобы вернуться назад, вы просто сделаете то же самое назад (в данном случае, <Leader><Leader>b g.

Это не означает, что текущая строка находится в середине экрана, хотя вы можете :set scrolloff=9999, чтобы середина экрана следовала за вашим курсором.

+0

Не совсем то, что я хочу, но это интересно! Этого может быть достаточно для меня, я попробую! – b3nj1

0

Это не даст вам именно то, что вы хотите, но оно получит текст функции на экране (при условии, что он не слишком длинный).

  1. м - установить метку в текущей позиции курсора.
  2. Неоднократно нажмите } (переход вперед по абзацу), пока вы не увидите код, который вы хотите.
  3. `a - возврат к указанной вами отметке.

«Пунктом» в терминах vim является группа последовательных непустых строк. Это хорошее приближение для блока кода. Также обратите внимание, что вы можете использовать любую букву для команды mark, поэтому может быть до 52 из них активны одновременно.

+0

Спасибо за ваш ответ, но это не совсем то, что я искал:/romainl ответил на мой вопрос, проверьте его. – b3nj1

Смежные вопросы