2

У меня есть несколько HTML-шаблонов Django, которые я хочу автоматически отформатировать. Я читал, что Vim имеет формат "htmldjango" , который можно применять, но я не хочу открывать каждый файл вручную и применять его.

Как запустить команду Vim из командной строки, чтобы применить это форматирование к одному или нескольким файлам в одном пакете?

2 ответа2

3

Как насчет чего-то вроде этого:

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

:argdo перебирает все переданные файлы. После обеспечения желаемого типа файла, файл повторно отступ gg=G и сохранен.

Вы можете добавить -c quitall для автоматического выхода из Vim.

0

Вот скрипт beautify.sh , который отформатирует любой файл в командной строке, используя Neovim.

Он должен работать с любым форматом файлов, который распознает сама 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",
                        }
        }
}

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .