gpt4 book ai didi

vim - 如何使用 vim 作为 unix 过滤器来缩进源代码

转载 作者:行者123 更新时间:2023-12-01 09:45:31 27 4
gpt4 key购买 nike

我想使用 vim 作为通用源代码缩进器。

这是我对 shell 函数的初步尝试,它包装了 vim 的调用,使 vim 根据文件类型和 shiftwidth 参数重新缩进 STDIN:

vim-indent () {
local ext=$1
local width=$2
local file=$(mktemp --suffix=."$ext")
cat >| "$file"
vim -E +"set sw=$width|normal! gg=G" +'x' -- "$file" >/dev/null
cat "$file"
}

测试 1:用 2 个空格缩进重新缩进 c 源代码

vim-indent c 2 << "EOF"
int main(int argc, char** argv) {
char operator;
printf("Enter an operator (+, -): ");
scanf("%c", &operator);
switch (operator) {
case '+':
case '-':
printf(operator);
break;
default:
printf("Error! operator is not correct");
}
return 0;
}
EOF

成功。c 源代码重新缩进了 2 个空格:

int main(int argc, char** argv) {
char operator;
printf("Enter an operator (+, -): ");
scanf("%c", &operator);
switch (operator) ​{
case '+':
case '-':
printf(operator);
break;
default:
printf("Error! operator is not correct");
}
return 0;
}

测试 2:用 2 个空格缩进重新缩进 bash 源代码

vim-indent sh 2 << "EOF"
#!/usr/bin/bash
hello() {
echo "Hello World"
}
if true; then
echo "It is true"
fi
EOF

失败。函数体正确缩进,但 if 语句不缩进:

#!/usr/bin/bash
hello() {
echo "Hello World"
}
if true; then
echo "It is true"
fi

测试 3:用 2 个空格缩进重新缩进 html 源代码

vim-indent html 2 << "EOF"
<html>
<body>
<div>
<p>Hello</p>
</div>
</body>
</html>
EOF

失败。完全没有缩进:

<html>
<body>
<div>
<p>Hello</p>
</div>
</body>
</html>

当我在 vim 中编辑 bashhtml 文件时,我可以重新缩进它们。

为什么上面的测试对于c源代码成功,但是对于bashhtml源代码却失败了?

结论

我结合了答案中的建议并创建了一个可以用作通用源代码缩进器的工作 shell 脚本(在下面作为答案提交)。

最佳答案

将此添加到 .vimrc :

filetype plugin indent on

根据您的 html 缩进首选项,您可能还需要将此行添加到 .vimrc :

let g:html_indent_inctags="html,body,head" 

这一行是必需的,因为在某些 Vim 版本中,默认的 html 缩进文件(位于 :e $VIMRUNTIME/indent/html.vim )不会在 <html> 内缩进行, <body><head>标签。

关于vim - 如何使用 vim 作为 unix 过滤器来缩进源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49909891/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com