Vim için otomatik girinti / format kodu?


34

Kullanabildiğimde Vim'i daha fazla kullanmaya çalışıyorum. Vim ve Aptana gibi bir IDE arasındaki en büyük tutuşumdan biri de otomatik girintileme yeteneği.

Otomatik biçimlendirme kodunun (HTML, CSS, PHP) bir yolu var, bu yüzden düzgün girintili mi?

Eğer öyleyse, bunu vim'e nasıl yüklersiniz? Eklentileri çok fazla anlamıyorum. Bu konuyu incelemeyi denedim ve daha fazla kafam karıştı: vim auto-indent davranışını nasıl değiştirebilirim?


Hangi dili girmeye çalıştığınızı açıklayabilir misiniz? Ben zaten vim tarafından destekleniyorsa, daha fazla çaba sarf etmeden otomatik olarak girintili olmasını beklerdim. Değilse, bir eklenti alabilmeniz gerekir.
Edd Steel

ideal olarak Html / css ve php
chrisjlee

Yanıtlar:


53

Tüm dosyayı otomatik olarak girintilemek için:

gg
=G

Açıklaması:

  • gg - dosyanın başına git
  • G - dosyanın sonuna git
  • =- girinti

2
Yıkabilir misin? G tipik olarak kendi başına nedir? ve = G?
Chrisjlee

@Chris düzenlemeye bakın
takeshin

1
Güzel ipucu, bunu asla bilmiyordum. Ancak, bash ile bir çöp iş yapar.
Sparhawk

gg=GDosyayı açmadan kabuktan nasıl yürütülür ?
WM

@ takeshin lütfen daha fazla açıklayabilir misiniz, dosyada mı
yazmalıyız yoksa

14

Mevcut kodu otomatik biçimlendirme hakkında bilmiyorum, ancak kod yazıyorsanız ve otomatik girintiye ihtiyacınız varsa:

  • :set autoindent(veya :set ai) otomatik girintiyi açar
  • Ctrl- dkodunuzu girintisiz hale getirmek için (AKA outdent)
  • Sekme veya girinti boşlukları - Şahsen sekme kullanıyorum
  • :set tabwidth=4(veya :set tw=4) bir sekmenin kod girintisi yapması gereken boşlukları kontrol eder
  • >>Komut geçerli satırı girintiler. Bir sayıya önek eklerseniz, 4>>o zaman geçerli satırdan başlayarak 4 satır girintili olacağını söyleyin .
  • Aynı şekilde <<komut bir satır girintisini kaldıracak

Umarım bu size iyi bir başlangıç ​​verir.


7
Mevcut kodu otomatik olarak girintili yapmak için ={motion}normal modda kullanın ; örneğin =G, geçerli koddan dosyanın sonuna kadar tüm kodu girintiler. ==geçerli çizgiyi girintiler.
Edd Steel

1
ayrıca girinti eklentilerinin yüklendiğinden emin olun (örn. ile :filetype indent on)
jw013 02:11

2
tw = 4 olarak ayarlandı TEXTWIDTH değerini 4'e ayarlar
Steffen Roller

4

Otomatik Girinti *.sh

Sadece aşağıdaki satırları ekleyin ~/.vimrc

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

Bu sadece vim veya tüm editör araçları ile düzenleme için geçerli midir?
WM

1
~./vimrcsadece vim editörü için geçerlidir.
Rahul Patil

2

Bu eklenti, kodunuzda biçimlendirme yapmayı kolaylaştırır. Harici formatlayıcıları entegre eder ve vim'in girintili işlevselliği konusunda bir geri dönüşe sahiptir.

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

Ayrıca, biçimlendirme ve girinti arasındaki farkı dikkat edin. Girinti yalnızca her satırdan önce boşlukları düzeltirken, biçimlendirme operatörler etrafındaki boşluklar vb. Gibi başka herhangi bir şeyle de ilgilenir.


2

~/.vimrcDosyayı oluşturun / düzenleyin ve aşağıdaki satırı ekleyin:

set autoindent

2
Bu mevcut cevaplara hiçbir şey
eklemez

@jasonwryan Aslında Hai Vu'nin cevabı :set autoindentsadece mevcut dosya için otomatik girintiyi mümkün kılan belirtiler. .vimrcDosyaya eklemek , otomatik girintiyi kalıcı olarak sağlar.
Akshat Maheshwari,


0

Bash olarak şunu yapıyorum:

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

bu yorumları ortadan kaldırır ve "bash way" betiğini yeniden yönlendirir. Eğer script HEREDOCS içeriyorsa işe yaramaz, fakat bunu yaparsanız:

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

Herhangi bir komut dosyası ile çalışacak, ancak tüm komut dosyası 4 boşluk ile girintili olacaktır. değiştirmek için çekinmeyin ama betiğimde ismimi alıntılayıp gönderin! : D


Bunun sorununun eksik olduğuna inanıyorum; Bir dizi çizgiyi girmekten ziyade, OP'nin VIM'de çeşitli diller için otomatik girintilemek istediğini düşünüyorum. Bir kenara, sedeğer istersen, bunu doğrudan biraz daha başarabilirsin : cat script_to_be_reindented.sh | sed 's#^# #g'(Eee, peki, SO markdown, boşlukları bir sekmeyle değiştiriyor, ama bunu
anlıyorsun

0

vim'in otomatik biçim / girintisi oldukça iyi çalışıyor. İlk önce, bu satırı şuna yazın ~/.vimrc:

filetype plugin indent on

Sonra bir dosyayı vim ile açın ve yazın gg=G

( ggimleci ilk satıra taşır =. Gindent komutunu çalıştırır . indent komutunu buradan son satıra kadar çalıştırmasını söyler.)

Otomatik biçim gerçekten kötü görünüyorsa, her satırın girintili bırakıldığı gibi, sonra çalıştırın :scriptnamesve .../indent/html.vimlistede (veya hangi dili kullanıyorsanız) listede olup olmadığını kontrol edin . Değilse ~/.vimrc, doğru olduğundan emin olun . Veya :filetype plugin indent onvim komut satırından kaçtıysanız, dosyayı yeniden açmanız gerekir.:e

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.