Automatické odsazení / formátování kódu pro Vim?

Snažím se používat Vim čím dál víc, když můžu. Jedním z mých největších úchopů mezi Vim a IDE, jako je Aptana, je schopnost automatického odsazení .

Existuje prostředek pro automatické formátování kódu (HTML, CSS, PHP), aby byl správně odsazen?

Pokud ano, jak to nainstalujete do vim? velmi dobře rozumíte pluginům. Zkoušel jsem zkontrolovat toto vlákno a více mě to zmátlo: Jak změnit chování automatického odsazení vim?

Komentáře

  • Můžete objasnit, jaký jazyk se pokoušíte odsadit? Očekával bych, že pokud je ‚ s podporován vim, měl by se již bez dalšího úsilí automaticky odsazovat. Pokud ne, měli byste mít možnost získat plugin.
  • Ideálně Html / CSS a php

Odpovědět

Automatické odsazení celého souboru:

gg =G 

Vysvětlení:

  • gg – přejít na začátek souboru
  • G – přejít na konec souboru
  • = odrážka

komentáře

  • Mohl byste to rozebrat? Co je to g obvykle samo o sobě? and = G?
  • @Chris vidět úpravy
  • Pěkný náznak, nikdy jsem to nevěděl. S bash to však dělá nesmysl.
  • Jak spustit gg=G ze shellu bez otevření souboru?
  • @takeshin můžete prosím, vysvětlete to mnohem dále, musíme to napsat do souboru nebo to musíme spustit v terminálu

Odpovědět

Nevím o automatickém formátování stávajícího kódu, ale pokud píšete kód a potřebujete automatické odsazení:

  • :set autoindent (nebo :set ai) zapne automatické odsazení
  • Ctrl d pro zrušení odsazení (AKA outdent) your code
  • Tab or spaces to indent – I osobne use tab
  • :set tabwidth=4 (or :set tw=4) bude řídit, kolik mezer by karta měla odsadit kód
  • Příkaz >> odsadí aktuální řádek. Pokud jej předponou číslo, řekněme 4>>, pak odsadí 4 řádky, počínaje aktuálním řádkem.
  • Podobně << příkaz zruší odsazení řádku

Doufám, že vám to dá dobrý začátek.

Komentáře

  • Chcete-li automaticky odsadit existující kód, použijte ={motion} v normálním režimu – např. =G odsadí veškerý kód od aktuálního řádku po konec souboru. == odsadí aktuální řádek.
  • také se ujistěte, že jsou načteny odsazené pluginy (např. s :filetype indent on)
  • set tw = 4 nastaví TEXTWIDTH na 4

odpověď

automatické odsazení *.sh

Stačí přidat následující řádky do ~/.vimrc

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

Komentáře

  • Platí to pouze pro úpravy pomocí vim nebo všech editorských nástrojů?
  • ~./vimrc použitelné pouze pro editor vim.

odpověď

Tento plugin usnadňuje provádění formátování kódu . Integruje externí formátovače a má záložní funkci odsazení vim.

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

Všimněte si také rozdílu mezi formátováním a odsazením. Odsazení opravuje pouze mezery před každým řádkem, zatímco formátování řeší i jakékoli jiné věci, například mezery kolem operátorů atd.

Odpověď

Vytvořte / upravte soubor ~/.vimrc a přidejte následující řádek:

set autoindent 

Komentáře

  • To nepřidává nic k existujícím odpovědím …
  • @jasonwryan Vlastně Hai Vu ‚ s odpověď uvádí :set autoindent, která umožňuje automatické odsazení pouze pro aktuální soubor. Přidáním do .vimrc umožňuje automatické odsazení trvale.
  • vaše část komentáře je již zmíněna Rahul ‚ s odpovědí, takže před zveřejněním přemýšlejte

Odpověď

Automatický formát / odsazení vim funguje docela dobře. Nejprve vložte tento řádek do ~/.vimrc:

filetype plugin indent on 

Poté otevřete soubor ve vimu a zadejte gg=G

(gg přesune kurzor na první řádek. = spustí příkaz indent. G řekne příkazu indent, aby se spustil odtud na poslední řádek.)

Pokud autoformát vypadá opravdu špatně, protože každý řádek je právě odsazený, spusťte :scriptnames a zkontrolujte, zda .../indent/html.vim (nebo jakýkoli jazyk, který používáte) je v seznamu. Pokud ne, zkontrolujte, zda je váš ~/.vimrc správný. Nebo pokud jste spustili :filetype plugin indent on z příkazového řádku vim budete muset znovu otevřít soubor :e

Odpovědět

Chcete-li provést přeformátování skriptu bash, navržené řešení gg = G ve VIM nefunguje dobře, bez ohledu na to, zda nastavíte skript typu shell. Místo toho to funguje;

shfmt -i 2 -ci script.sh

Chcete-li identifikovat všechny řádky se 2 mezerami a opravit jinak formátování.

Odpovědět

V bash to dělám:

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

tím se eliminují komentáře a reindents skript „bash way“. nebude fungovat, pokud skript obsahuje HEREDOCS, ale pokud to uděláte:

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

bude fungovat s jakýmkoli skriptem, ale celý skript bude odsazen o 4 mezery. neváhejte upravit, ale uveďte mé jméno ve vašem skriptu a pošlete ho! : D

Komentáře

  • Domnívám se, že to může postrádat smysl otázky; spíše než odsazení sady řádků věřím, že OP si přál automatické odsazení v rámci VIM pro různé jazyky. Kromě toho toho můžete dosáhnout o něco příměji pomocí sed, pokud si to přejete: cat script_to_be_reindented.sh | sed 's#^# #g' (ehm, no, SO markdown nahrazuje mezery tabulátorem, ale získáte bod)
  • Celá tato odpověď je vložení mezer do přední části řádku a resetování veškerého zarovnání. Totéž (kromě markdown) lze provést s sed -i 's|^[ \t]\+| |' script.sh (to je 4 mezery uvnitř | |, ale tento web filtruje více mezer do jednoho) .

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *