Auto recuo / código de formato para o Vim?


35

Estou tentando usar o Vim cada vez mais quando posso. Uma das minhas maiores vantagens entre o Vim e um IDE como o Aptana é a capacidade de recuo automático.

Existe um meio de código de formatação automática (HTML, CSS, PHP) para que seja recuado corretamente?

Se sim, como você instala isso no vim? Eu não entendo muito plugins. Tentei revisar esse tópico e isso me confundiu mais: como alterar o comportamento de recuo automático do vim?


Você poderia esclarecer qual idioma você está tentando recuar? Eu esperaria que, se já for suportado pelo vim, ele já deve ser recuado automaticamente sem maiores esforços. Caso contrário, você deverá conseguir um plugin.
Edd Steel

idealmente HTML / CSS e PHP
chrisjlee

Respostas:


54

Para recuar todo o arquivo automaticamente:

gg
=G

Explicado:

  • gg - vá para o início do arquivo
  • G - vá para o final do arquivo
  • =- travessão

2
Você poderia quebrar isso? O que é g tipicamente por si só? e = G?
Chrisjlee #

@Chris see the edit
takeshin

11
Boa dica, eu nunca soube disso. No entanto, ele faz um trabalho de lixo com o bash.
Sparhawk

Como executar a gg=Gpartir do shell sem abrir o arquivo?
WM

@takeshin você pode explicar isso muito mais longe, precisamos de digitá-lo no arquivo ou precisamos para executá-lo no terminal
Kasun Siyambalapitiya

14

Não sei como formatar automaticamente o código existente, mas se você estiver escrevendo um código e precisar do recuo automático:

  • :set autoindent(ou :set ai) ativará o recuo automático
  • Ctrl- dpara recuar (AKA recuar) seu código
  • Tabulação ou espaços a serem recuados - uso pessoalmente a tabulação
  • :set tabwidth=4(ou :set tw=4) controlará quantos espaços uma guia deve recuar o código
  • O >>comando irá recuar a linha atual. Se você o prefixar por um número, diga 4>>que ele recuará 4 linhas, começando com a linha atual.
  • Da mesma forma, o <<comando irá recuar uma linha

Espero que isso lhe dê um bom começo.


7
Para recuar automaticamente o código existente, use ={motion}no modo normal - por exemplo =G, recuará todo o código da linha atual até o final do arquivo. ==recuará a linha atual.
Edd Steel

11
Certifique-se também encaixes travessão estão a ser carregados (por exemplo, com a :filetype indent on)
jw013

2
set tw = 4 define o TEXTWIDTH para 4
Steffen Roller

4

Recuo automático *.sh

Basta adicionar as seguintes linhas em ~/.vimrc

filetype indent on
set smartindent
autocmd BufRead,BufWritePre *.sh normal gg=G

Isso se aplica apenas à edição com o vim ou a todas as ferramentas do editor?
WM

11
~./vimrcaplicável apenas ao editor vim.
Rahul Patil

2

Esse plug-in facilita a formatação do seu código. Ele integra formatadores externos e tem um recurso na funcionalidade de indentação do vim.

https://github.com/Chiel92/vim-autoformat

Observe também a diferença entre formatação e recuo. Recuar apenas corrige o espaço em branco antes de cada linha, enquanto a formatação também lida com qualquer outra coisa, como espaço em branco ao redor dos operadores etc.


2

Crie / edite o ~/.vimrcarquivo e adicione a seguinte linha:

set autoindent

2
Isso não acrescenta nada às respostas existentes ...
jasonwryan

@jasonwryan Na verdade, a resposta de Hai Vu menciona :set autoindentque permite o recuo automático apenas para o arquivo atual. Adicioná-lo no .vimrcarquivo permite o recuo automático permanentemente.
Akshat Maheshwari

o seu pedaço de comentário já é mencionado pela resposta de Rahul, então pense antes de postar
Indrajeet Gour

0

No bash, faço o seguinte:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3

isso elimina comentários e reutiliza o script "bash way". não funcionará se o script contiver HEREDOCS, mas se você fizer isso:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri|head --lines=-1|tail --lines=+3

funcionará com qualquer script, mas o script inteiro será recuado por 4 espaços. sinta-se livre para modificar, mas cite meu nome no seu script e publique-o! : D


Eu acredito que isso pode estar perdendo o objetivo da questão; em vez de recuar um conjunto de linhas, acredito que o OP desejava recuar automaticamente no VIM para uma variedade de idiomas. Como um aparte, você pode ser capaz de conseguir isso um pouco mais diretamente com sedse assim o desejar: cat script_to_be_reindented.sh | sed 's#^# #g'(er, bem, então remarcação está substituindo os espaços com um guia, mas você começa o ponto)
eacousineau

0

O autoformato / recuo do vim funciona muito bem. Primeiro, coloque esta linha no seu ~/.vimrc:

filetype plugin indent on

Em seguida, abra um arquivo no vim e digite gg=G

( ggmove o cursor para a primeira linha. =executa o comando indent. Gdiz ao comando indent para executar daqui até a última linha.)

Se o formato automático parecer realmente ruim, como todas as linhas são apenas recuadas, execute :scriptnamese verifique se .../indent/html.vim(ou o idioma que você está usando) está na lista. Caso contrário, verifique se ~/.vimrcestá correto. Ou, se você executou a :filetype plugin indent onpartir da linha de comando do vim, precisará abrir novamente o arquivo:e

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.