您好我想将VIM作为我的主IDE。我知道有很多插件等但我有一个问题:VIM是否有可能理解编写代码的特定语言(如果我不会插入我的语言)?我的意思是我可以定义一些规则,然后使用例如用于自动完成,重构,折叠等。例如,考虑以下两个perl代码,其中我想要重构变量。在第一个示例中,存在具有相同名称的变量,但是一个是标量,另一个是数组和散列,在第二个示例中,之前定义的变量的相同名称用于另一个范围(循环等)。因此,使用简单的文本匹配进行重构并不是优雅的方式:
第一个例子:
my @same_name;
my $same_name; # How to refactor this variable without affecting all other variables?
my %same_name;
$same_name[0] = 5;
$same_name{"key"} = 5;
$same_name = 5;
第二个例子:
my @array;
my $already_existing_variable; # How to refactor this variable
foreach my $already_existing_variable (@array){
print $already_existing_variable; # Without affecting this variable
}
print $already_existing_variable; # Variable that should be also refactorized
或者,如果我在$arr
{并在此处点击TAB}时如何实现这一目标,它会自动延伸到$array[
?为此,VIM必须知道当我在$
声明的变量之前添加@
时,我想访问数组元素。
另一个例子是:如何使用例如折叠码来折叠代码。 BEGIN
和END
个关键字?那些是琐碎的小例子,但我认为你明白了。我认为编写自己的编译器或其他东西是类似的任务。谢谢。
答案 0 :(得分:4)
我几乎整天都在使用vim和我的perl脚本:
App::EditorTools
为您提供了重命名Padre
等变量的功能。
$ cpanm App::EditorTools
$ editortools install-vim
\pL
我不确定为什么它会在第二个示例中解析错误的范围,但您可以暂时将foreach
brock用lambda包装并首先在代码块中重命名变量。
sub {
foreach my $already_existing_variable (@array){
print $already_existing_variable; # Without affecting this variable
}
}->();
Perl::Tidy
有perltidy
命令行工具来格式化您的脚本。
$ cpanm Perl::Tidy
根据您的喜好创建~/.perltidyrc
。如下:
-pbp -pt = 2 -sbt = 2 -bt = 2 -bbt = 2 -CE -nbbc
在equalprg
perltidy
设为~/.vimrc
au FileType perl setl ep = perltidy
在您的脚本中输入gg=G
。
vim的内置编译器插件非常适合。
在:compiler
perl
设为~/.vimrc
au FileType perl:compiler perl
在正常模式下输入:make
:copen
以打开quickfix窗口如果您不想在快速修复程序列表中使用warnings
,则可以取消设置该标记。
let g:perl_compiler_force_warnings = 0
$PERL5LIB
在调用:make
时也很重要,您可以在其中指定特定目录。
let &l:path = './lib,./blib/lib,./blib/arch,' . &l:path
let $PERL5LIB = substitute(&l:path, ',', ':', 'g')
vim具有开箱即用的完美工具。见:help comple-generic
$ar
,然后按CTRL-N
您可能也对ctags
感兴趣。
答案 1 :(得分:0)
当第一句话为"Hello I would like to master VIM as my primary IDE."
Vim不是IDE。 Vim是一个文本编辑器。 (您可以使用谷歌查找更多信息)
如果你觉得IDE提供的功能(重构,更智能的自动完成......)比vim提供的功能更重要(快速移动,永远不要把你的手从主行,可编程编辑器...... )然后你应该使用IDE或带有vim插件的IDE。通常,如果要将IDE功能与vim功能混合使用,可以使用IDE的插件,而不是相反(有一些例外,例如eclim)。