我有一段格式錯誤的 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 檔案。但請注意,它只會進行縮進,不會新增或刪除換行符。