Подтвердить что ты не робот

Как перейти к началу текущего тела функции в Vim?

Как название, если я находится в середине тела функции, а тело функции очень длинное, как я могу вернуться к началу тела функции.

4b9b3361

Ответ 1

[m

Перейти к [count] предыдущему запуску метода

Работает для Java или аналогичных структурированных языков, а также для Python.

Ответ 2

C язык [[

Если ваш код C написан не в египетском стиле:

[[

[m работает только в том случае, если у вас есть вложение {} вокруг функции, например, class { method(){} } для Java/C++.

И это хорошая ставка, которая подходит как для египетских, так и для не египетских скобок:

?^[^ \t#]

Примеры:

void egypt() {
#define DONTCARE 1
    int indented code = 1;
}

void tpyge()
{
#define DONTCARE 1
    int indented code = 1
} 

Ответ 3

BTW, единственный относительно верный способ сделать это - изменить vim, см. этот пост

[править]
и это работает только с языками, поддерживаемыми буйными ctags. Поскольку мы не были сочтены подходящими для того, чтобы узнать, на каком языке вы хотите это сделать, возможно, что этот ответ также не будет правильным.
[/Править]

Ответ 4

Я потратил часы на создание этого шаблона: /^\s*\(\i\+\_[ \t\*]\+\)\+\i\+\_s*(\_[^)]*)\_s*{, это хорошо работает для меня.

РЕДАКТИРОВАТЬ: лучший шаблон (версия 2): /\(\(if\|for\|while\|switch\|catch\)\_s*\)\@64<!(\_[^)]*)\_[^;{}()]*\zs{

посмотрите эффект здесь: enter image description here

Вы можете отобразить некоторые удобные привязки в вашем .vimrc, такие как:

" jump to the previous function
nnoremap <silent> [f :call search('^\s*\(\i\+\_[ \t\*]\+\)\+\i\+\_s*(\_[^)]*)\_s*{', "bw")<CR>
" jump to the next function
nnoremap <silent> ]f :call search('^\s*\(\i\+\_[ \t\*]\+\)\+\i\+\_s*(\_[^)]*)\_s*{', "w")<CR>

РЕДАКТИРОВАТЬ: лучший шаблон (версия 2):

" jump to the previous function
nnoremap <silent> [f :call
\ search('\(\(if\\|for\\|while\\|switch\\|catch\)\_s*\)\@64<!(\_[^)]*)\_[^;{}()]*\zs{', "bw")<CR>
" jump to the next function
nnoremap <silent> ]f :call
\ search('\(\(if\\|for\\|while\\|switch\\|catch\)\_s*\)\@64<!(\_[^)]*)\_[^;{}()]*\zs{', "w")<CR>

Ответ 5

Как только вы перейдете по блокам и параграфам в отсортированном коде, вы можете посмотреть, что вы можете сделать, когда находитесь в середине этих блоков, посмотрев эта часть vim doc's.

Такие вещи, как удаление блока, вставка перед блоком, добавление после блока и т.д.

НТН

Ответ 6

Поиск (назад) для ?^{ обычно должен быть там.