我有一段格式错误的 Perl 代码:
if ($a==1){
&err_report("$a");
while($b!=1){
&err_ok();
}
}
我想要重新格式化在 Vim 中执行此操作。使用命令 后gg=G
,代码格式如下:
if ($a==1){
&err_report("$a");
while($b!=1){
&err_ok();
}
}
实际上,我想在 Vim 中将其格式化如下:
if ($a==1){
&err_report("$a");
while($b!=1){
&err_ok();
}
}
我应该怎么办?
- 使用后vim-perl,自动格式化仍然不能满足我的要求。
答案1
假设您使用的是类 Unix 操作系统...
联系到珍珠岩(高度可定制的 Perl 代码缩进器/格式化程序)。然后更新文件~/.vimrc
以包含以下内容:
filetype plugin indent on
autocmd FileType perl setlocal equalprg=perltidy\ -st
这将允许您标记所需的任何 Perl 代码块,然后按 重新格式化它=。这假设perltidy
在您的 中找到$PATH
,否则只需指定可执行文件的完整路径。
默认情况下,perltidy
将把您的代码格式化为
if ( $a == 1 ) {
&err_report("$a");
while ( $b != 1 ) {
&err_ok();
}
}
...但是通过使用-i=2
(--indent-columns=2
)和-pt=2
(--paren-tightness=2
)(您可以将这些选项放在~/.perltidyrc
文件中,每行一个)您可以获得
if ($a == 1) {
&err_report("$a");
while ($b != 1) {
&err_ok();
}
}
这几乎就是您所要求的。
如果确实要求 之后不能有空格while
,请使用-nsak=while
( --nospace-after-keyword=while
)。
答案2
首先设置所需的格式选项,例如set cindent sw=2 expandtab
(使用类似 C 的缩进,缩进 2 个空格,将制表符扩展为空格)。然后缩进整个文件/缓冲区。
答案3
Vim 带有 Perl 缩进插件,只要:filetype indent on
在启动时(例如 vimrc)有该插件,它就可以为你缩进 Perl 文件。但请注意,它只能缩进,不能添加或删除换行符。