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ěme4>>
, 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) .