我有一些 Django HTML 模板,我想自动格式化。我读过 Vim 有一个“htmldjango” 版本可以应用的格式,但我不想手动打开每个文件并应用它。
如何从命令行运行 Vim 命令以将此格式应用于单个批处理中的一个或多个文件?
答案1
那么像这样的事情怎么样:
vim -c "argdo setf htmldjango | execute 'normal! gg=G' | update" file1 file2 ...
:argdo
迭代所有传递的文件。确保所需的文件类型,文件将重新缩进(gg=G
)并保存。
您可以附加-c quitall
以自动退出 Vim。
答案2
这是一个脚本,beautify.sh
它将在命令行中格式化任何文件,使用新病毒。
它应该适用于 vim 本身识别的任何文件格式,因此 javascript、json、c、java 等。它不是一个真正的格式化程序,而更像是一个好用的缩进器。
使用示例:
$ cat /tmp/it.json
{
"images": [
{
"time": 2.86091,
"transaction":
{
"status": "Complete",
"gallery_name": "gallerytest1",
}
}
}
$ cat /tmp/it.json | beautify.sh
{
"images": [
{
"time": 2.86091,
"transaction":
{
"status": "Complete",
"gallery_name": "gallerytest1",
}
}
}
美化.sh
#!/usr/bin/env bash
function show_help()
{
ME=$(basename $0)
IT=$(CAT <<EOF
Format a file at the command line using neovim
usage: cat /some/file | $ME
$ME /some/file
)
echo "$IT"
exit
}
if [ "$1" == "help" ]
then
show_help
fi
# Determine if we're processing a file from stdin or args
if [ -p /dev/stdin ]; then
FILE=$(mktemp)
cat > $FILE
FROM_STDIN=true
else
if [ -z "$1" ]
then
show_help
fi
FILE="$*"
FROM_STDIN=false
fi
# put vim commands in a temp file to use to do the formatting
TMP_VIM_CMDS_FILE=$(mktemp)
rm -f $TMP_VIM_CMDS_FILE
echo "gg=G" > $TMP_VIM_CMDS_FILE
echo ":wq" >> $TMP_VIM_CMDS_FILE
# run neovim to do the formatting
nvim --headless --noplugin -n -u NONE -s $TMP_VIM_CMDS_FILE $FILE &> /dev/null
# show output and cleanup
rm -f $TMP_VIM_CMDS_FILE
if [ "$FROM_STDIN" == "true" ]
then
cat $FILE
rm -f $FILE
fi