Vim'de C ile boşlukları otomatik girintileme?


85

Eclipse ve java kullanarak biraz şımartıldım. Linux ortamında C kodlaması yapmak için vim kullanmaya başladım, vim'in bloklar için uygun aralığı otomatik olarak yapmasını sağlamanın bir yolu var mı?

Yani, bir {yazdıktan sonra, sonraki satırda girintili 2 boşluk olacak ve bu satırdaki bir geri dönüş, onu aynı girintide tutacak ve a}, 2 boşluk geri kayacak?

Yanıtlar:


135

Bu iki komut bunu yapmalıdır:

Bonus puanlar için bunları linux'daki ana dizininizde bulunan .vimrc adlı bir dosyaya koyun.


12
Bunları ~ .vim / ftplugin / c.vim içine koymanızı da tavsiye ederim, böylece her zaman cindent kullanmazsınız, sadece C / C ++ dosyaları için.
graywh

@graywh: pl, php, cpp, as, java ve aynı girintiye sahip olmasını istediğim diğer tüm dosyalar için ne olacak? Her biri için ayrı bir ayar dosyası oluşturmam gerekir mi?
davr

17
Vim'in toplu indent betiklerine (: filetype indent on) güveniyorum ki bu her zaman 'cindent' kullanmaktan çok daha iyidir.
graywh

3
dosya türü girintisinin cindent kullanmaktan neden daha iyi olduğu burada iyi açıklanmıştır: vim.wikia.com/wiki/…
Jayen


56

Vim'deki sekmeler hakkında her şeyi yazdım , bu da sormadığınız birkaç ilginç şey verir. Kaşlı ayraçları otomatik olarak girintilemek için şunu kullanın:

İki boşluğu girintilemek için (sekiz boşluktan oluşan bir sekme yerine, vim varsayılanı):

Vim'in sekiz boşluğu sekmelere dönüştürmesini engellemek için:

Bir metin bloğunun girintisini değiştirmek isterseniz, <ve> kullanın. Bunu genellikle blok seçim modu ile birlikte kullanırım (v, bir metin bloğu seçin, <veya>).

(Ben (ve diğer birçok insan) okumayı zor bulduğum için, sizi iki boşluklu girintiyi kullanmaktan vazgeçirmeye çalışırım, ama bu başka bir tartışma.)


Çok güzel blog. Hala vim için oldukça yeniyim, yine de orada iyi kaynaklar olduğunu bilmek güzel.
zxcv

3
Vardiya genişliğine ek olarak softtabstop değiştirmeyi de kaçırdınız.
graywh

8

Vim'in birçok özelliği ( autoindentve gibi cindent) varsayılan olarak kapalıdır. Vim'in sizin için neler yapabileceğini gerçekten görmek için, dürüst olmanız gerekir ~/.vimrc.

İyi bir başlangıç ​​geliyor $VIMRUNTIME/vimrc_example.vim. Denemek istiyorsanız, kullanın

ne zaman vim.

Aslında, ~/.vimrciyi yorumlandığı gibi içeriği kopyalamanızı ve vim'in nasıl kullanılacağını öğrenmeye başlamak için iyi bir yer olmasını öneririm . Bunu şu şekilde yapabilirsiniz

Bu, şu anki durumunuzun üzerine yazacak ~/.vimrc, ancak içinde sahip olduğunuz tek şey Davr'ın önerdiği girinti ayarları olsaydı, terlemem çünkü örnek vimrc bunu sizin için de halledecektir. Örneğe ve sizin için ne yaptığına dair eksiksiz bir bakış için bkz :help vimrc-intro.


6

Basitçe çalıştırın:


1
Eksik oy veren ben değildim, ancak bunun nedeni muhtemelen basitçe "otomatik girintiyi ayarla" nın "{" ve "}" yazıldığında kendi otomatik girintisini yapmaması ve aralığı otomatik olarak 2 boşluk olarak ayarlamamasıydı. İstedikleri buydu.
Victor Zamanian

3

En iyi cevabın aslında vim wikia'da açıklandığını düşünüyorum:

http://vim.wikia.com/wiki/Indenting_source_code

"Set autoindent" kullanılmaması gerektiğini unutmayın. Bu açıklamada bulduğum her şeyin en iyi özelliği, dosya başına ayarları yapabilmektir; bu, özellikle python ve C ++ 'da programlıyorsanız, örneğin birincisinde sekmeler için 4 boşluk ve ikincisindeki boşluklar.


0

ve Spaces + Tabs'ın bu saygıdeğer açıklamasını her zaman hatırlayın:

http://www.jwz.org/doc/tabs-vs-spaces.html


2
Bu adamın tartışmasıyla ne alakası var? SEKME karakterini kullanmamanın ve bunun yerine sabit kodlanmış boşluklarla doldurmanın herkesin sorunlarını nasıl çözdüğünü takip etmiyorum. Bu, örneğin, bir dosyayı açabilmeyi ve girintilerinin genişliğinin kendi tercihlerinize göre görünmesini imkansız hale getirir.
thomasrutter

1
Bu adamın çözümü çok daha iyi :) blogs.msdn.com/cyrusn/archive/2004/09/14/229474.aspx
thomasrutter

-1

Deneyin:

sw = 2 olarak ayarlayın

ts = 2 olarak ayarlayın

smartindent ayarla


Yardıma göre cindent, smartindent'ten daha iyidir, ancak yalnızca C benzeri kod için çalışır.
thomasrutter

smartindent kullanımdan kaldırıldı (sadece C benzeri kod için de geçerliydi). Dosya türü girintili komut dosyaları çok daha iyidir.
graywh

@graywh, hangi yetkili kaynak smartindent'in kullanımdan kaldırılmış durumunu belirtir?
memeplex
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.