5. Компаньоны ViОбычно Vim используется совместно с другими мощными инструментами такими как ctags и gdb. Ctags для быстрой навигации сквозь миллионы строк "C/C++" кода и gdb для отладки "C/C++" кода. Эта глава посвящена именно этим двум незаменимым инструментам. Ctags - это самая мощная и нужная команда для написания программ на C, C++, Java, Perl, Korn/Bourne shell scripts или Fortran. Разработчики широко используют ctags для навигации в тысячах функций программ на C/C++. (Смотрите 'man ctags'). Очень важно, чтобы вы научились использовать ctags. Это позволит вам эффективно писать программы на C/C++,Java и т.д. Навигации в море кода - одна из самых важных задач во время разработки программ на C/C++. Использование ctags позволит вам решать эту задачу быстро и эффективно. Ctags - позволяет очень быстро читать код, просматривать функции, перескакивая от одной функции к другой. Без такой навигации, вы скорее всего заблудитесь в коде ! Ctags - компас для программиста. Использование ctags : ctags *.cpp gvim -t foo_function gvim -t main Эти команда откроет программу на C++, которая содержит функцию foo_function() и разместит курсор на первой строке функции foo_function(). Вторая команда, отправит вас на строку в которой определена функция main(). Внутри Vim вы можете перейти к функции введя : (двоеточие) tag < имя функции >как показано ниже: :tag sample_function Эта команда разместит курсор на первой строке функции sample_function() Если вы захотите перейти прямо к функции от строки в файле, которая содержит имя этой функции, поместите курсор перед именем функции и нажмите CTRL+], это отправит вас прямо на строку где начинается искомая функция. // example code switch(id_number) { Case 1: if ( foo_function( 22, "abcef") == 3 ) ^ | | | Разместите курсор здесь (перед foo_function) и нажмите CTRL+] Это отправит вас на начало "foo_function". Чтобы вернуться назад нажмите CTRL+t Чтобы отправиться назад, на исходную строку, нажмите CTRL+t. Вы можете нажимать CTRL+t несколько раз чтобы вернуться в точку где вы начали навигацию. Таким образом можно "пройти" скозь все функции C/C++ кода. 5.1 Ctags для ESQLТ.к. ctags не поддерживают языка Embedded SQL/C (ESQL), то ,для создания тэгов для этого языка, необходим приведенный ниже shell script. ESQL/C - это команды SQL, для управления базой данных,встроенные в C программу. Oracle ESQL/C называется Pro*C и Sybase;для Infomix есть ESQL/C;для PostgreSQL есть "ecpg". Сохраните этот файл как "sqltags.sh" и выполните chmod a+rx tags_gen.sh. #!/bin/sh # Программа для создания ctags для ESQL, C++ и C файлов ESQL_EXTN=pc tag_file1=tags_file.1 tag_file2=tags_file.2 which_tag=ctags rm -f $tag_file1 $tag_file2 tags aa=`ls *.$ESQL_EXTN` #echo $aa for ii in $aa do #echo $ii jj=`echo $ii | cut -d'.' -f1` #echo $jj if [ ! -f $jj.cpp ]; then echo " " echo " " echo "***********************************************" echo "ESQL *.cpp не существуют.. " echo "Вы должны сгенерировать *.cpp из файла *.pc " echo "используя Oracle Pro*C пре-компилятор или Sybase" echo "либо Informix esql/c пре-компилятор." echo "А затем перезапустить эту программу" echo "***********************************************" echo " " exit fi rm -f tags $which_tag $jj.cpp kk=s/$jj\.cpp/$jj\.pc/g #echo $kk > sed.tmp #sed -f sed.tmp tags >> $tag_file1 #sed -e's/sample\.cpp/sample\.pc/g' tags >> $tag_file1 sed -e $kk tags >> $tag_file1 done # Теперь обработаем все C++/C файлы, исключая ESQL *.cpp файлы rm -f tags $tag_file2 bb=`ls *.cpp *.c` aa=`ls *.$ESQL_EXTN` for mm in $bb do ee=`echo $mm | cut -d'.' -f1` file_type="NOT_ESQL" # Exclude the ESQL *.cpp and *.c files for nn in $aa do dd=`echo $nn | cut -d'.' -f1` if [ "$dd" = "$ee" ]; then file_type="ESQL" break fi done if [ "$file_type" = "ESQL" ]; then continue fi rm -f tags $which_tag $mm cat tags >> $tag_file2 done mv -f $tag_file2 tags cat $tag_file1 >> tags rm -f $tag_file1 # Чтобы все работало правильно необходимо отсортировать файл с тэгами .... sort tags > $tag_file1 mv $tag_file1 tags 5.2 Ctags для Javascript программ, оболочек Korn и BourneЭтот shell скрипт может быть использован для генерации тэгов для очень большого количества программ написанных на JavaScript,PHP/FI скрипты,Korn shell,C shell,Bourne shell и многих других. Это очень "стандартный" модуль. Сохраните этот файл как tags_gen.sh и выполните chmod a+rx tags_gen.sh. #!/bin/sh tmp_tag=tags_file tmp_tag2=tags_file2 echo " " echo " " echo " " echo " " echo " " echo "Генерируем тэги для ...." while : do echo " Введите расширение файлов, для которых вы хотите сгенерировать тэги." echo -n " Расширения файлов должны быть заданы как sh, js, ksh, etc... : " read ans if [ "$ans" == "" ]; then echo " " echo "Неверный ввод. Попробуйте еще раз!" else break fi done \rm -f $tmp_tag aa=`ls *.$ans` for ii in $aa do jj=`echo $ii | cut -d'.' -f1` #echo $jj cp $ii $jj.c ctags $jj.c echo "s/$jj.c/$ii/g" > $tmp_tag2 sed -f $tmp_tag2 tags >> $tmp_tag \rm -f tags $jj.c done sort $tmp_tag > tags \rm -f $tmp_tag $tmp_tag2 5.3 Дебаггер gdbВы почти наверняка захотите использовать gdb (смотрите 'man gdb') вместе с Vim. Отладка - один из наиболее сложных и трудоемких процессов в программировании. Чтобы использовать gdb, вы должны компилировать программу с опцией -g3. Например:
Чтобы легко настроить псевдонимы, сделайте следующее -
Двойное нажатие TAB приведет к автоматическому завершению командной строки, что сохранит вам массу времени. Чтобы получить помощь во время работы -
Для установки breakpoints и входа в отладку
Чтобы проанализовать core используйте -
Вы также можете использовать GUI версию gdb называемую xxgdb. Инструменты для отслеживания "утечек" памяти -
Следующий Предыдущий Содержание раздела |