Я хочу отобразить функцию C, к которой принадлежит текущая строка. Я не хочу использовать какой-либо плагин, потому что я работаю на нескольких операционных системах с различными возможностями машины и конфигурациями. Я пробовал большинство плагинов, и это не сработало по той или иной причине. Я должен написать что-то очень простое и минимальное, и которое работает с чрезвычайно основными функциями vim.
Текущее решение:
Я скопировал функцию vim от коллеги, которая, по сути, ищет reg-ex, совпадающий с началом имени функции. Он показывает имя в нижней части экрана в течение нескольких секунд и уходит
fun! ShowFuncName()
let lnum = line(".")
let col = col(".")
echohl ModeMsg
echo getline(search("^[^ \t#/]\\{2}.*[^:]\s*$", 'bW'))
echohl None
call search("\\%" . lnum . "l" . "\\%" . col . "c")
endfun
проблема
Проблема в том, что эта штука не работает с ярлыками. Если в строке между определением функции и текущей строкой присутствует метка, сценарий показывает имя метки вместо имени функции.
В противном случае скрипт работает, потому что в нашей кодовой базе существует жесткое и быстрое правило всегда начинать определение функции со столбца 1, а фигурные скобки - со второй строки и далее.
Предлагаемое исправление
Вместо поиска регулярных выражений, почему бы не использовать клавиши перемещения vim. То есть сделать следующее:
- Сохранить текущую строку №, столбец №
- Перейдите назад с помощью кнопок перемещения [[], чтобы перейти к определению функции
- Линия чуть выше этого будет иметь функцию C. (это строго соблюдается в правилах кодирования)
- напечатать строку
- Перейти к строке №, столбцу №, сохраненному на шаге № 1.
Я не знаю, как сделать шаг 2. упомянутый выше.