Indentare automată / cod format pentru Vim?

Încerc să folosesc Vim din ce în ce mai mult când pot. Una dintre cele mai mari aderențe dintre Vim și un IDE precum Aptana este abilitatea de a indenta automat .

Există un mijloc de codare de formatare automată (HTML, CSS, PHP), astfel încât să fie corect indentat?

Dacă da, cum instalați acest lucru în vim? înțelegeți foarte mult pluginurile. Am încercat să revizuiesc acest fir și m-a confundat mai mult: Cum se schimbă comportamentul vim auto-indent?

Comentarii

  • Ați putea clarifica în ce limbă încercați să indentați? M-aș aștepta ca, dacă ‘ este susținut deja de vim, ar trebui să fie deja auto-indentată fără eforturi suplimentare. Dacă nu, ar trebui să puteți obține un plugin.
  • în mod ideal Html / css și php

Răspundeți

Pentru a indenta automat întregul fișier:

gg =G 

Explicat:

  • gg – mergeți la începutul fișierului
  • G – mergeți la sfârșitul fișierului
  • = liniuță

Comentarii

  • Ai putea să o descompui? Ce este de obicei g de la sine? și = G?
  • @Chris vedeți editarea
  • Sugestie drăguță, nu am știut asta niciodată. Cu toate acestea, face o treabă cu bash.
  • Cum se execută gg=G din shell fără a deschide fișierul?
  • @takeshin poți vă rugăm să o explicați mult mai departe, trebuie să-l tastați în fișier sau trebuie să-l rulăm în terminal

Răspunde

Nu știu despre formatarea automată a codului existent, dar dacă scrieți cod și aveți nevoie de indentare automată:

  • :set autoindent (sau :set ai) va activa opțiunea de indentare automată
  • Ctrl d pentru a anula indentarea (AKA outdent) codul dvs.
  • Fila sau spațiile pentru a indenta – Eu personal folosesc fila
  • :set tabwidth=4 (sau :set tw=4) va controla câte spații o filă ar trebui să indenteze codul
  • Comanda >> va indenta linia curentă. Dacă o prefixați cu un număr, spuneți 4>> apoi va indenta 4 linii, începând cu linia curentă.
  • La fel Comanda << va dezactiva linia

Sper că acest lucru vă oferă un început bun.

Comentarii

  • Pentru a indenta automat codul existent, utilizați ={motion} în modul normal – de ex. =G va indenta tot codul de la linia curentă până la sfârșitul fișierului. == va indenta linia curentă.
  • de asemenea, asigurați-vă că sunt încărcate pluginuri de indentare (de exemplu, cu :filetype indent on)
  • set tw = 4 setează TEXTWIDTH la 4

Răspuns

Indentare automată *.sh

Doar adăugați următoarele rânduri în ~/.vimrc

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

Comentarii

  • Se aplică acest lucru numai pentru editarea cu vim sau toate instrumentele de editor?
  • ~./vimrc aplicabil numai pentru editorul vim.

Răspuns

Acest plugin facilitează efectuarea formatării codului dvs. . Acesta integrează formatatori externi și are o alternativă la funcționalitatea de indentare vim.

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

De asemenea, observați diferența dintre formatare și indentare. Indentarea corectează doar spațiul alb înainte de fiecare linie, în timp ce formatarea tratează și orice alt lucru, cum ar fi spațiul alb din jurul operatorilor etc.

Răspuns

Creați / editați fișierul ~/.vimrc și adăugați următoarea linie:

set autoindent 

Comentarii

  • Acest lucru nu adaugă nimic la răspunsurile existente …
  • @jasonwryan De fapt Hai Vu Răspunsul ‘ menționează :set autoindent care activează indentarea automată numai pentru fișierul curent. Adăugarea acestuia în .vimrc fișier activează indentarea automată permanent.
  • comentariul dvs. este deja menționat de răspunsul Rahul ‘, așa că gândiți-vă înainte de a posta

Răspuns

vim „autoformat / indent funcționează destul de bine. Mai întâi, puneți această linie în ~/.vimrc:

filetype plugin indent on 

Apoi deschideți un fișier în vim și tastați gg=G

(gg mută cursorul pe prima linie. = rulează comanda indentare. G spune comenzii indentare să ruleze de aici până la ultima linie.)

Dacă autoformatul arată foarte rău, ca și cum fiecare linie este lăsată indentată, executați :scriptnames și verificați dacă .../indent/html.vim (sau orice limbă pe care o utilizați) se află în listă. Dacă nu, asigurați-vă că ~/.vimrc este corect. Sau dacă ați rulat :filetype plugin indent on din linia de comandă vim, va trebui să redeschideți fișierul :e

Răspuns

Pentru a face o reformatare a scriptului bash, soluția gg = G propusă nu funcționează bine în VIM, indiferent dacă setați scriptul să fie de tip shell. În schimb, acesta funcționează;

shfmt -i 2 -ci script.sh

Pentru a identifica toate liniile cu 2 spații și pentru a corecta formatarea în caz contrar.

Răspuns

În bash fac asta:

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

acest lucru elimină comentariile și reintroduce scriptul „bash way”. nu va funcționează dacă scriptul conține HEREDOCS, dar dacă faceți acest lucru:

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

va funcționa cu orice script, dar întregul script va fi indentat de 4 spații. nu ezitați să modificați, dar citați-mi numele în script și postați-l! : D

Comentarii

  • Cred că este posibil să lipsească scopul întrebării; mai degrabă decât a indenta un set de linii, cred că OP a dorit să auto-indenteze în cadrul VIM pentru o varietate de limbi. Deoparte, este posibil să puteți obține acest lucru puțin mai direct cu sed dacă doriți: cat script_to_be_reindented.sh | sed 's#^# #g' (er, bine, Markdown SO înlocuiește spațiile cu o filă, dar obțineți punctul)
  • Tot acest răspuns este să inserați spații în partea din față a liniei și să resetați toate aliniamentele. Același lucru (cu excepția reducerii) se poate face cu sed -i 's|^[ \t]\+| |' script.sh (adică 4 spații în interiorul | |, dar acest site filtrează mai multe spații într-unul) .

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *