我在Perl中有一个子程序,应该像这样缩进:
sub GetFiles
{
my $pwd = shift;
my @input = @_;
my @returned;
my @DirectoryContent = &GetContentInformation(@input);
foreach (@DirectoryContent)
{
my %current = %{$_};
if ($current{'info'} =~ /<DIR>/)
{
my $RecurseDir = &GetRecurseDir($pwd, \%current);
push(@returned, &GetFiles($RecurseDir,
&GetDirectoryContents($RecurseDir)));
}
else
{
# clean up the data
my $size = $current{'info'};
# filesize will be in number of bytes
# remove file separators
#$size =~ s/,//g;
my $extension = &GetFileExtension($current{'name'});
delete($current{'info'});
$current{'size'} = $size;
$current{'extension'} = $extension;
# push(@returned, \%current);
}
}
@returned;
}
但是当我按下=%
(是的,cindent
打开),光标位于子程序块的起始括号时,它会像这样缩进:
sub GetFiles
{
my $pwd = shift;
my @input = @_;
my @returned;
my @DirectoryContent = &GetContentInformation(@input);
foreach (@DirectoryContent)
{
my %current = %{$_};
if ($current{'info'} =~ /<DIR>/)
{
my $RecurseDir = &GetRecurseDir($pwd, \%current);
push(@returned, &GetFiles($RecurseDir, &GetDirectoryContents($RecurseDir)));
}
else
{
# clean up the data
my $size = $current{'info'};
# filesize will be in number of bytes
# remove file separators
#$size =~ s/,//g;
my $extension = &GetFileExtension($current{'name'});
delete($current{'info'});
$current{'size'} = $size;
$current{'extension'} = $extension;
# push(@returned, \%current);
}
}
@returned;
}
为什么这样做?我该如何解决?
编辑:应该注意我在Windows上使用gvim 7.3。
答案 0 :(得分:9)
也许这是一种神奇的想法,但......我曾经有过:
filetype plugin on
filetype indent on
在我的_vimrc
(在Windows XP上,自编gvim
,各种版本),我会在Perl,LaTeX和HTML文件中得到各种有趣的缩进问题。
现在,我有
filetype indent on
filetype plugin on
并且一切似乎都是大块头。 YMMV。
另外,我强烈推荐Andy Lester's vim-perl。
答案 1 :(得分:3)
cindent
特定于c
语言,与许多其他语言一起使用时会被破坏。您可能想要使用的是filetype plugin indent on
。您可以将其添加到.vimrc
,vim将为大多数开箱即用的语言找出正确的语法/缩进。如果vim还没有它们,你也可以很容易地添加语法/缩进指南。
答案 2 :(得分:2)
我的系统使用 filetype indent on
(而非filetype
plugin
indent on
)正确缩进代码。 [Vim 7.2]
答案 3 :(得分:1)
将这个问题追溯到vim正则表达式匹配器中的一个怪癖,在perl.vim缩进文件中,有几个地方正则表达式包含尝试使用\ [.... <转义[在集合中] / p>
**let bracepos = match(line, '[(){}\[\]]', bracepos + 1)**
但无论出于什么原因\ [匹配任何\或[不在线] [ 所以要修复vim缩进文件unescape所有匹配语句中的左括号,即......
let bracepos = match(line, '[(){}[\]]', bracepos + 1)