Cómo usar Vim para formatear el archivo desde la línea de comandos

2

Tengo algunas plantillas HTML de Django que me gustaría formatear automáticamente. He leído que Vim tiene un formato "htmldjango" que se puede aplicar, pero no quiero abrir manualmente cada archivo y aplicarlo.

¿Cómo ejecuto un comando Vim desde la línea de comando para aplicar este formato a uno o más archivos en un solo lote?

Cerin
fuente
Esta respuesta debe hacer lo que quieras. Describe el uso del modo por lotes en un entorno Windows, aunque la traducción a Linux debería ser obvia.
AFH

Respuestas:

3

Qué tal algo como esto:

vim -c "argdo setf htmldjango | execute 'normal! gg=G' | update" file1 file2 ...

:argdoitera sobre todos los archivos pasados. Después de garantizar el tipo de archivo deseado , el archivo se vuelve a sangrar ( gg=G) y se guarda.

Puede agregar -c quitallpara salir automáticamente de Vim.

Ingo Karkat
fuente
1

Aquí hay un script beautify.shque formateará cualquier archivo en la línea de comando, usando Neovim .

Debería funcionar con cualquier formato de archivo que vim reconozca, por lo que javascript, json, c, java, etc. No es un verdadero formateador, sino más bien un buen penetrador.

Ejemplo de uso:

$ 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",
                        }
        }
}

beautify.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
Brad Parks
fuente