2009-06-11 18 views
4

Ich benutze Vim in Windows, um Assembler-Code zu bearbeiten. Es ist eine nicht standardisierte Sprache und die Disassemblierung der Binärdatei erfolgt über ein benutzerdefiniertes Skript, so dass ich das Format selbst definiere. Ich möchte Tags verwenden, um den Code für Unterprogrammaufrufe durchzuspringen. Ich habe viel herumgesucht und alle Straßen scheinen dazu zu führen, Ctags zu verwenden, um eine Tag-Datei zu erzeugen, aber offensichtlich wird das in meinem Fall nicht funktionieren, da ich mich nicht mit C-Code beschäftige. Wie ist es möglich, eine benutzerdefinierte Tag-Datei zu erstellen? Hier ist ein Beispiel für den Code. Zuerst wird jede Subroutine durch das Schlüsselwort und den Hex-Offset (die erste Spalte) definiert.VIM und benutzerdefinierte Tagging

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 

Und irgendwo im Code wird ein Sprung zum Sub ausgeführt;

d9ad 20 b7 e2 JSR $e2b7 

Vielen Dank für jede Hilfe, die Sie

Antwort

2

ctags unterstützt einen viele von Sprachen, einschließlich Montage zur Verfügung stellen können - wenn Ihre Lieblings-Variante nicht enthalten ist, vielleicht Sie es in hinzufügen könnten ...?

5

Verwenden Sie Ctags zusammen mit dem Taglist-Plugin (http://vim.sourceforge.net/scripts/script.php?script_id=273). Das Quellpaket von Ctags enthält die Datei EXTENDING.html, die beschreibt, wie eine Erweiterung definiert wird. Ich habe das für mehrere Sprachen gemacht. Hier zwei Beispiele (machen (1) und POD (perl altes Dokument)):

%%%%%%%%%% 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/ 

Um dies zu verwenden, um mit taglist Sie benötigen zwei weitere Linien in ~/.vimrc. Für die obigen Beispiele:

%%%%%%%%%% 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' 

Diese screenshot zeigt das taglist Navigationsfenster mit zusätzlichem POD Abschnitt.