В vim как проверить макрос #ifdef, в котором я сейчас нахожусь? - PullRequest
1 голос
/ 22 декабря 2011

Я использую vim / cscope / ctags для просмотра исходного кода на языке C. Много раз я нахожу, что макрос определен дважды или даже больше, используя #ifdef s, и я смотрю на определение, которое мне не нужно.

Итак, мой вопрос: есть ли в vim ярлык, с помощью которого я могу узнать, находится ли строка, на которую я смотрю, внутри макроса #ifdef?

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

" Show function name                                                               
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                                                                             
map f :call ShowFuncName() <CR>     

Спасибо.

Ответы [ 2 ]

6 голосов
/ 22 декабря 2011

Я обнаружил, что в моем ежедневном использовании более чем достаточно

  • [ #
  • ] #

    переходить назад и вперед между ветвями текущего # если * условный блок

  • % для циклического переключения между ними, в то время как на одной из директивных строк препроцессора условного блока

Иногда я добавляю сложение addhoc:

  • * ZF 1045 *%
  • v * ** 1052 тысяча пятьдесят-одна *% * +1053 ** 1 054 *% * ** 1056 тысяча пятьдесят-пять * г F * ** 1060 тысяча пятьдесят девять *

Я только что проверил это на

#ifdef BLA
    #if BLO == 1
        #include <something>
    #else
        #pragma error "oops"
    #endif
#elifdef BLU
    #include <something_else>
#endif

Нет путаницы между вложенными условными выражениями, а также с неусловными директивами. Я также обнаружил, что это не зависит от типа файла (или что плагин filetype для text тоже поддерживает его):)

0 голосов
/ 01 августа 2013

Мы можем использовать "ctags --excmd = number" для генерации файла тегов.Он выдаст местоположение тега, используя номер строки, поэтому исправит эту проблему.

...