[原创]vim字典文件自动提取工具

Posted by c4pr1c3 on August 25, 2008

vim有一个非常好的特性——关键字自动完成功能,这个功能对于coder来说是非常贴心的。因为我们经常会因为一个笔误,敲错了一个字母或者漏打了一个 字母而导致程序出错。对于C语言这样的编译型语言来说,一般只能等到代码编译时才能发现错误。还好,有了vim,生活原来可以如此的美好。哈!

用Perl写了这样的一个脚本,用来遍历代码目录下的所有文本文件,找出其中所有的关键词,剔除掉其中重复的关键词,写入字典文件,OK!

其实这个脚本只需要简单修改一下代码,增加自定义的过滤器,就可以只对指定的代码类型文件进行关键词的提取。更高级的一点的应该是对提取关键词的正则表达式下一番功夫,比如只提取函数名(这个最好结合不同的语言单独来写)。感兴趣的朋友们可以自己动手:)

vim的配置就更简单了,只需要一步,在~vimrc文件中增加set dictionary=key.dict就可以了。当然也可以临时性的指定字典文件。在需要的时候C-X,C-K就可以出现候选字列表了,简单吧!我个人更喜欢用C-P这个快捷键,按一次就可以了。

附源代码:

#!/bin/perl -w

# [File Name] build_dict.pl

# [Author] huangwei1983 at gmail.com

# [Version] 0.1

my @files = <*>;

my @keywords = ();

my @uniq_keywords = ();

my $output = key.dict;

#delete previously created dict file before a new start

if(-e $output)

{

unlink($output) or die Can’t delete file $output : $!\n;

}

#iterate over files in current direcotry except for this script file

foreach $file (@files)

{

if($file ne $0) #dont’t extract keywords from myself!

{

if(-s $file && -f $file) #test if it is a non-null file

{

if(-T $file) #test if it is a text file

{

open FILE,«/span>$file or die Can’t open file for read : $!\n;

while($line = </span>)

{

while($line =~ m/([a-zA-Z]\w*)/g)

{

push(@keywords,$1);

}

}

close FILE;

}

}

elsif(-d $file) #test if it is a directory

{

@subdirectory = glob $file./*;

push(@files,@subdirectory);

}

}

}

#get distinct keywords

my %seen;

@seen{@keywords} = ();

@uniq_keywords = keys %seen;

#write keywords to file

open FILE,>$output or die Can’t open file for write : $!\n;

foreach my $keyword (@uniq_keywords)

{

print FILE ($keyword.\n);

}

close FILE;