我需要检测传递给脚本的多行字符串中第一行的缩进级别。储存起来。从其他行删除此缩进。将删除了缩进级别的多行字符串传递给另一个程序(我已经想好了该怎么做),将缩进添加到多行字符串中的所有行并将其打印到stdout(我也知道如何做)。在
具体地说,我对vim和Python格式化程序YAPF有一个问题。 yapf的工作方式是,如果python文件的格式不正确,就会导致错误。在
想象一下这个
def f():
# imagine some very very long lines here that we want to reformat
如果我在vim中选择这个想象的行,然后按gq
(我已经set formatprg=yapf
),vim会用yapf的回溯来代替这几行,这当然不好。但如果我选择整个功能,它将完美地完成任务。在
你可以用
^{pr2}$这将导致IndentationError
而echo 'fooo = 1' | yapf
可以工作
所以我认为一个很好的解决方法是删除缩进存储第一行的缩进级别,以某种方式将不带缩进的字符串传递给yapf,然后将缩进添加到结果中。问题是我希望这是一个一行或接近,以便它可以直接存储在我的vimrc。所以python不是一个很好的匹配,因为我至少需要导入re-package等
所以我想到了perl。在
唯一的问题是我对perl不太了解。在
所以现在我的实验是这样的
$a = " foo = 1\n bar = '1'";
my ($indent, $text) = $a =~ m/^(\s+)(.*)$/m;
$command = "echo " . $text;
$out = `$command`;
print "$out\n";
print "$text\n";
我很乐意得到任何帮助。也许还有更简单的方法来做这个,我不知道。在
既然您似乎已经熟悉Python了,我建议您使用它的^{} 模块,该模块包含
dedent
和(在3.3及更高版本中)indent
函数,这些函数可以为您完成大部分工作:相关问题 更多 >
编程相关推荐