Î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ți4>>
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) .