#vim
Вопрос:
Есть ли способ перейти к подписи функции, в которой в данный момент находится мой курсор, а затем вернуться туда, где я был?
Например, когда у меня есть функция 1000 строк, где префикс x y:
относится к номерам строк, есть ли способ перейти от моего местоположения курсора x 555
к подписи x 0
, а затем вернуться туда, где я был ( x 555
):
x 000: void theFn(int arg) {
x ...: ...
x 555: /// where my cursor starts
x ...: ...
x 999: }
И, да, я не могу не согласиться с вами в том, что не должно быть 1000 линейных функций.
Кроме того, есть ли способ автоматически перейти к концу функции, не находясь в открывающей скобке функции?
Комментарии:
2. не знал, что есть vi stackexchange, спасибо. зачем создавать теги, когда вы можете просто создать stackexchange для каждого тега.
3. Потому что вы вообще не можете создать обмен стеком самостоятельно.
4. Подобные вопросы задавались и на них отвечали много раз в прошлом.
Ответ №1:
Полезными движениями в таком случае являются [[
, ][
и <C-o>
.
Как мы можем прочитать в справке:
*[[*
[[ [count] sections backward or to the previous '{' in
the first column. |exclusive|
Note that |exclusive-linewise| often applies.
*][*
][ [count] sections forward or to the next '}' in the
first column. |exclusive|
Note that |exclusive-linewise| often applies.
*CTRL-O*
CTRL-O Go to [count] Older cursor position in jump list
(not a motion command).
{not available without the | jumplist| feature}
Короче говоря:
[[
чтобы добраться до самого начала<C-o>
чтобы вернуться на прежнее место][
идти до конца
Эти движения будут иметь желаемый эффект только тогда, когда фигурные скобки находятся в первом столбце, но из вашего примера кажется, что это требование не выполнено.
В таком случае в конце :h section
мы можем прочитать:
If your '{' or '}' are not in the first column, and you would like to use "[["
and "]]" anyway, try these mappings: >
:map [[ ?{<CR>w99[{
:map ][ /}<CR>b99]}
:map ]] j0[[%/{<CR>
:map [] k$][%?}<CR>
К сожалению, Vim не предлагает лучшего решения, поскольку он не анализирует синтаксис.
Однако это может измениться по мере того, как Неовим экспериментирует с сиделкой на дереве.
Также не было бы удивительно, если бы существовал плагин, который обеспечивает лучшую поддержку такого движения.
Панель тегов может соответствовать этой роли:
- Переключить окно панели тегов
- Переключитесь на него
- Курсор должен быть уже над текущим тегом
- Нажмите enter
- Окно переключения
- Вы находитесь в начале функции
- Используйте
<C-o>
, чтобы вернуться
Я также однажды нашел и включил в свою конфигурацию отображение, которое также может быть полезно в таком случае:
nnoremap <Leader>gd ?v%(%(if|while|for|switch)_s*)@<!([^)]*)_[^;(){}]*zs{
Комментарии:
1. Это хорошо работает для языков, которые я обычно использую — спасибо!