vim = 代码格式化不太好

vim = 代码格式化不太好

我使用 gg=G 来格式化格式错误的代码,但效果不佳。它不会对齐括号内的代码,而且只对齐前几行代码。例如,下面的代码 1 使用 gg=G 格式化为 2。我做错了吗?

1. codes before formatted
============================================

    # Strategy: while there is still input left in both files:
    #
    Output the line that should come first.
    #
    Read a new line from the file that line came from.
    while [ $status1 -eq 0 -a $status2 -eq 0 ]
    do
    if [[ "$Line2" > "$Line1" ]]; then
    echo -e "1.\t$Line1"
    read -u3 Line1
    status1=$?
    else
    echo -e "2.\t$Line2"
    read -u4 Line2
    status2=$?
    fi
    done
    # Now one of the files is at end-of-file.
    # Read from each file until the end.
    # First file1:
    while [ $status1 -eq 0 ]
    do
    echo -e "1.\t$Line1"
    read Line1 <&3
    status1=$?
    done
    # Next file2:
    while [[ $status2 -eq 0 ]]
    do
    echo -e "2.\t$Line2"
    read Line2 <&4
    status2=$?
    done
    # Close and remove both input files
    exec 3<&- 4<&-
    rm -f $file1 $file2
    exit 0



========================================================================
2. formatted codes with gg=G

#!/bin/bash
usage ()
{
    if [ $# -ne 2 ]; then
        echo "Usage: $0 file1 file2" 2>&1
            exit 1
            fi
}
# Default temporary directory
: ${TEMPDIR:=/tmp}
# Check argument count
usage "$@"
# Set up temporary files for sorting
file1=$TEMPDIR/$$.file1
file2=$TEMPDIR/$$.file2
# Sort
sort $1 > $file1
sort $2 > $file2
# Open $file1 and $file2 for reading. Use file descriptors 3 and 4.
exec 3<$file1
exec 4<$file2
# Read the first line from each file to figure out how to start.
read Line1 <&3
status1=$?
read Line2 <&4
status2=$?
# Strategy: while there is still input left in both files:
#
Output the line that should come first.
#
Read a new line from the file that line came from.
while [ $status1 -eq 0 -a $status2 -eq 0 ]
do
if [[ "$Line2" > "$Line1" ]]; then
echo -e "1.\t$Line1"
read -u3 Line1
status1=$?
else
echo -e "2.\t$Line2"
read -u4 Line2
status2=$?
fi
done
# Now one of the files is at end-of-file.
# Read from each file until the end.
# First file1:
while [ $status1 -eq 0 ]
do
echo -e "1.\t$Line1"
read Line1 <&3
status1=$?
done
# Next file2:
while [[ $status2 -eq 0 ]]
do
echo -e "2.\t$Line2"
read Line2 <&4
status2=$?
done
# Close and remove both input files
exec 3<&- 4<&-
rm -f $file1 $file2
exit 0

答案1

问题是 Vim 无法识别您正在编辑的文件类型。

为了让 vim 按照您的期望处理此文件,您有两个选择:

  • 使用 .sh 扩展名保存
  • 使用以下命令将文件类型设置为 sh:set filetype=sh

然后运行gg=G以自动缩进。

希望这可以帮助。

相关内容