Советы и рекомендации по Vim и Ctags [закрыто]

Вам нужно подсчитать глубину рекурсивных вызовов ... и затем выбросить исключение, если глубина рекурсивных вызовов достигает определенного порога.

Например:

void TheMethod(object[] otherParameters, int recursiveCallDepth)
{
   if (recursiveCallDepth > 100) { 
      throw new Exception("...."); }
   TheMethod(otherParameters, ++recursiveCallDepth);
}
485
задан kenorb 2 February 2016 в 12:53
поделиться

12 ответов

Ctrl + ] - переходят к определению
Ctrl + T - Переход назад из определения.
Ctrl + W Ctrl + ] - Открываются, определение в горизонтальном разделении

Добавляют, что эти строки в vimrc
map <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>

Ctrl + \ - Открывают определение на новой вкладке
, Высокий звук + ] - Открывают определение в вертикальном разделении

После того, как теги сгенерированы. Можно использовать следующие ключи для меток в и тег из функций:

Ctrl + Left MouseClick - Переходят к определению
Ctrl + Right MouseClick - Переход назад из определения

394
ответ дан Olivier Pons 2 February 2016 в 22:53
поделиться

Я инкапсулировал управление тегами в экспериментальный плагин мой.

Относительно разработки C++ в энергии, я уже ответил там : Я использую свой собственный комплект и несколько других плагинов.

5
ответ дан Community 2 February 2016 в 22:53
поделиться
  • 1
    Моя потребность, просто рисуют одно волновое изображение на холсте и изменяют его цвет от по щелчку функции, и также больше тогда два холста будут перекрытый, действительно ли это возможно? – Anup 23 August 2013 в 04:53

Я использую ALT-left и альтернативных правых для выталкивания/продвижения из/в стопку тега.

" Alt-right/left to navigate forward/backward in the tags stack
map <M-Left> <C-T>
map <M-Right> <C-]>

, Если Вы используете hjkl для перемещения, можно отобразиться <M-h> и <M-l> вместо этого.

16
ответ дан strager 2 February 2016 в 22:53
поделиться

Другой полезный плагин для разработки C cscope Так же, как Ctags позволяет Вам перейти к определениям, переходам Cscope к вызов функции.

, Если у Вас есть cscope в Вашем ~/bin/каталог, добавьте следующее к своему .vimrc и используйте g^] для движения в функцию вызова (см.: помогите cscope).

if has("cscope")
    set csprg=~/bin/cscope
    set csto=0
    set cst
    set nocsverb
    " add any database in current directory
    if filereadable("cscope.out")
        cs add cscope.out
        " else add database pointed to by environment
    elseif $CSCOPE_DB != ""
        cs add $CSCOPE_DB
    endif
endif

Почти забыл... Так же, как ctags - необходимо генерировать (и периодически обновлять), база данных. Я использую следующий сценарий

select_files > cscope.files
ctags -L cscope.files
ctags -e -L cscope.files
cscope -ub -i cscope.files

, Где 'select_files' является другим сценарием, который извлекает список C и заголовочных файлов от Make-файла. Таким образом, я индексирую только файлы, на самом деле используемые проектом.

45
ответ дан nimrodm 2 February 2016 в 22:53
поделиться
  • 1
    @Anrup, почему не только используют два изображения в этом случае? –  23 August 2013 в 05:26

Команда, которую я использую больше всего, является C-], который переходит к определению функции под курсором. Можно использовать его чаще для следования за большим количеством вызовов. После этого C-o принесет Вам назад один уровень, C-i идет глубже снова.

8
ответ дан raimue 2 February 2016 в 22:53
поделиться

Можно добавить каталоги к ctags поиску. Например, мне создали индекс ctags для Qt4 и имею это в моем .vimrc:

set tags+=/usr/local/share/ctags/qt4
27
ответ дан strager 2 February 2016 в 22:53
поделиться
  • 1
    Моя потребность, просто рисуют одно волновое изображение на холсте и изменяют его цвет от по щелчку функции, и также больше тогда два холста будут перекрытый, действительно ли это возможно? – Anup 23 August 2013 в 04:53

Я нашел необходимая вещь плагина taglist. Это перечисляет все теги, о которых это знает (файлы, которые Вы открыли) в отдельном окне, и делает очень легким переместиться по большим файлам.

я использую его главным образом для разработки Python, но это может только быть лучше для C/C++.

6
ответ дан Walter 2 February 2016 в 22:53
поделиться

Все вышеупомянутое и...

code_complete: завершенный параметр функции, фрагменты кода, и многое другое.

taglist.vim: браузер Исходного кода (поддерживает C/C++, Java, жемчуг, Python, tcl, sql, php, и т.д.)

23
ответ дан Johan 2 February 2016 в 22:53
поделиться

Я поместил следующее в мой файл .gvimrc, который ищет дерево тегов в любой точке для поиска файла тегов при запуске gvim:

function SetTags()
    let curdir = getcwd()

    while !filereadable("tags") && getcwd() != "/"
        cd ..
    endwhile

    if filereadable("tags")
        execute "set tags=" . getcwd() . "/tags"
    endif

    execute "cd " . curdir
endfunction

call SetTags()

Затем я периодически регенерирую файл тегов в верхней части моего исходного дерева с помощью скрипта, который выглядит лайк:

#!/bin/bash

find . -regex ".*\.\(c\|h\|hpp\|cc\|cpp\)" -print | ctags --totals --recurse --extra="+qf" --fields="+i" -L -
4
ответ дан 22 November 2019 в 22:43
поделиться

Я адаптировал свои плагины энергии в течение двух лет для поддержки достаточно большого проекта C++. Можно смотреть на них.

Они используют ctags и cscsope.

http://www.vim.org/scripts/script.php?script_id=1638
http://www.vim.org/scripts/script.php?script_id=2507

5
ответ дан 22 November 2019 в 22:43
поделиться

Одна строка, которая всегда идет в моем .vimrc:

set tags=./tags;/

Это будет искать в текущем каталоге «теги» и поднимите дерево к корню, пока оно не будет найдено. Итак, вы можете находиться где угодно в вашем исходном дереве, а не просто в его корне.

176
ответ дан 22 November 2019 в 22:43
поделиться

Несколько одноименных определений

g открывают определение в разбиении, но также делают : tjump , который либо переходит к определению, либо, если есть несколько определений, предоставляет вам список определений на выбор.

10
ответ дан 22 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: