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. Инструменты для отслеживания "утечек" памяти -
Следующий Предыдущий Содержание раздела |