vim = não forma códigos muito bem

1

Eu usei gg = G para formatar códigos mal formatados, mas não funciona bem. Não alinha os códigos dentro do suporte e apenas faz primeiro várias linhas de códigos. Por exemplo, os códigos 1 abaixo são formatados como 2 usando gg = G. Estou indo errado?

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
    
por user198436 10.10.2013 / 21:01

1 resposta

3

O problema é que o Vim não reconhece o tipo de arquivo que você está editando.

Para permitir que o vim trate esse arquivo conforme o esperado, você tem duas opções:

  • Salve-o com uma extensão .sh
  • Defina o tipo de arquivo para sh com :set filetype=sh

Em seguida, execute gg=G para identificar automaticamente.

Espero que isso ajude.

    
por Yefb 16.10.2013 / 05:04