2016-09-12 6 views
0

При использовании плагина taglist в VIM мы можем использовать Ctrl + ] для перехода к глобальной переменной или функции. Однако, если переменная является локальной, то она не может найти в тегах. Я нашел из этого link, что мы можем перейти к локальным переменным, используя gd или глобальную переменную, используя gD.taglist и локальная переменная

Поскольку это выходит за рамки команды taglist, мы не можем использовать Ctrl + t, чтобы вернуться обратно к месту, откуда мы прыгнули.

Можно ли увеличить taglist, чтобы перейти к локальной переменной в случае, если тег не найден? И затем используйте стек, чтобы вернуться обратно к месту, откуда он прыгнул?

+1

Конечно, вы могли бы реализовать, что в качестве заплатки (так что ответ на ваш вопрос «ДА»), однако, это не основная функциональность тегов, поэтому автор плагина не может принять его для включения , –

+0

@IngoKarkat вы можете дать мне подсказку, как я могу разработать этот патч? Мне нужно переопределить поведение 'Ctrl' +'] 'key – Raj

+0

Во-первых,' 'никак не связан * каким-либо образом * с плагином Taglist. Во-вторых, '' переходит к первому совпадающему тегу, независимо от того, в каком файле он находится. Если вам нужна возможность выбрать, к какому файлу вы переходите, попробуйте 'g]'. – romainl

ответ

1

Вот картинка. Поскольку плагин Taglist на самом деле не определяет его (он отображает только теги текущего буфера и устанавливает теги), интеграция с ним не требуется.

nnoremap <silent> <C-]> :<C-u>let pos = [bufnr('')] + getpos('.')<Bar>execute 'normal!' (v:count ? v:count : '') . "\<lt>C-]>"<CR>:if pos == [bufnr('')] + getpos('.')<Bar>execute 'normal! gd'<Bar>endif<CR> 

Это первая запись текущего буфера и положения курсора, а затем попытка выполнить нормальный переход тега. Если позиция не изменилась, мы возвращаемся к команде gd. О, на самом деле нам не нужно проверять позицию и вместо этого можно использовать try...catch. Версия 2:

nnoremap <silent> <C-]> :<C-u>try<Bar>execute 'normal!' (v:count ? v:count : '') . "\<lt>C-]>"<Bar>catch /^Vim\%((\a\+)\)\=:E426:/<Bar>execute 'normal! gd'<Bar>endtry<CR> 
+0

не совсем то, что я хотел, но довольно близко. спасибо за решение. – Raj