2009-06-11 3 views
4

Я использую vim в окнах для редактирования кода сборки. Это нестандартный язык, и дизассемблирование двоичного файла выполняется с помощью специального скрипта, поэтому я сам определяю формат. Я хотел бы использовать теги, чтобы иметь возможность перепрыгивать через код для вызовов подпрограмм. Я искал вокруг совсем немного, и все дороги, похоже, приводят к использованию ctags для создания файла тегов, но, очевидно, это не будет работать в моем случае, поскольку я не имею дело с C-кодом. Как создать собственный файл тегов? Вот пример кода. Во-первых, каждая подпрограмма определяется ключевым словом и шестнадцатеричным смещением (первый столбец).VIM и пользовательская привязка

Subroutine e2b7 

e2b7 2c c0 11 03 BBS [Branch if bits are '1'] #$03, $11c0, 00e2ce ($12) 
e2bc a9 00  LDA [Load A with mem] #$00 
. blah 
. blah 
. blah 

И где-то в коде выполняется переход к югу;

d9ad 20 b7 e2 JSR $e2b7 

Спасибо за любую помощь вы можете предоставить

ответ

2

ctags поддерживает много языков, в том числе сборки - если ваш любимый вариант не включен, возможно, вы могли бы добавить его в ...?

5

Используйте ctags вместе с taglist-plugin (http://vim.sourceforge.net/scripts/script.php?script_id=273). Исходный пакет ctags содержит файл EXTENDING.html, который описывает, как определить расширение. Я сделал это для нескольких языков. Вот два примера (сделать (1) и POD (Perl старый документ)):

%%%%%%%%%% file '~/.ctags' %%%%%%%%%%%%%%%%%%%% 

--langmap=perl:+.pod 
--regex-perl=/^=head1[[:space:]]*(.+)/\1/o,pod/ 
--regex-perl=/^=head2[[:space:]]*(.+)$/. \1/o,pod/ 
--regex-perl=/^=head3[[:space:]]*(.+)$/.. \1/o,pod/ 
--regex-perl=/^=head4[[:space:]]*(.+)$/... \1/o,pod/ 
--regex-perl=/^=for[[:space:]]+([^:]+):(.*)$/*\1:\2/o,pod/ 
--regex-perl=/^__(DATA|END)__$/__\1__/l,labels/ 

--regex-make=/^([^:# \t]+)[ \t]*:($|[^=]+)/\1/t,targets/ 

Для использования с taglist вам понадобятся две дополнительные строки в ~/.vimrc. Для приведенных выше примеров:

%%%%%%%%%% file '~/.vimrc' %%%%%%%%%%%%%%%%%%%% 

let tlist_perl_settings = 'perl;c:constants;f:formats;l:labels;p:packages;s:subroutines;d:subroutines;o:POD' 
let tlist_make_settings = 'make;m:makros;t:targets' 

Это показывает screenshot навигационное окно taglist с дополнительной секцией POD.

Смежные вопросы