Используя Vim, я пытаюсь переместить курсор в середину блока кода, но я не могу понять, как это сделать:
//cursor is for instance here.
{
//or here
//some code
// .... **** move cursor here ****
//some more code
}
Последняя идея состоит в том, чтобы иметь ярлык, который сохраняет текущую позицию, перемещает курсор в середину блока кода, устанавливает текущую строку в середину экрана (с ярлыком «zz»), а затем возвращается к сохраненная позиция.
Я бы предпочел встроенную функцию vim, но плагин тоже работает.
РЕДАКТИРОВАТЬ: Это для C ++, и поэтому я хочу, чтобы это было в скобках {}.
Я дал (быстрый и грязный) ход:
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>
Больше общего решения, но может быть полезным — простое движение Плагин позволяет прыгать повсюду с большой точностью.
Например:
<Leader><Leader>w
(дефолт) — ‘движение слов‘
g
Затем, чтобы вернуться назад, вы должны сделать то же самое в обратном направлении (в данном случае, <Leader><Leader>b g
,
Это не устанавливает текущую строку в середину экрана, хотя вы можете :set scrolloff=9999
чтобы середина экрана следовала за курсором.
Это не даст вам именно то, что вы хотите, но на экране появится текст функции (при условии, что она не слишком длинная).
«Абзац» в терминах vim — это группа последовательных непустых строк. Это хорошее приближение для блока кода. Также обратите внимание, что вы можете использовать любую букву для команды пометки, так что может быть одновременно до 52 из них активными.