Vim'de sekme boyutunu nasıl değiştirebilirim?


172

Her seferinde CSS'de bir seçici eklediğimde Enterve özellikleri tanımlamak için düğmesine bastığımda şöyle bitiyor:

#selector {
        property: value;
}

(8 boşluklu sekmeler)

Vim'i şu şekilde yapmak için nasıl yapılandırabilirim:

#selector {
    property: value;
}

(4 boşluklu sekmeler)


4
4 boşluk genişliğinde bir sekme ister misiniz? Dört boşluk mu? Veya 1 boşluk genişliğinde dört sekme? Onlar farklı şeyler ve siz net değilsiniz. Her durumda, okuma ile başlayın: he ts,: he sw, and: he expandt
abeyer

Yanıtlar:


103

Zoul'un cevabına genişleyen:

Vim'i belirli bir dosya türünü düzenlerken belirli ayarları kullanacak şekilde ayarlamak istiyorsanız, otomatik komutları kullanmak istersiniz:

autocmd Filetype css setlocal tabstop=4

Bu, sekmelerin 4 boşluk olarak görüntülenmesini sağlayacaktır. Ayar expandtab, tabstopsekmeye bastığınızda Vim'in gerçekten boşluk eklemesine (kontrol edilenlerin sayısı ) neden olur; softtabstopbackspace işlevinin düzgün çalışmasını sağlamak için kullanmak isteyebilirsiniz (yani, her seferinde bir karakter silmek yerine sekmeler kullanılmalıdırsa girintiyi azaltın).

Şeyleri nasıl kurulacağı konusunda tam eğitimli bir karar için, üzerinde Vim dokümanlar okumak gerekir tabstop, shiftwidth, softtabstopve expandtab. En ilginç bit expandtab( :help 'expandtab) altında bulunur :

Vim'de sekmeleri kullanmanın dört ana yolu vardır:

  1. Her zaman 'tabstop'u 8'de tutun,' softtabstop 've' shiftwidth 'i 4 (veya 3 veya istediğinizi seçin) olarak ayarlayın ve' noexpandtab'ı kullanın. Daha sonra Vim bir sekme ve boşluk karışımı kullanır, ancak yazmak ve her 4 (veya 3) karakterde bir sekme göründüğü gibi davranır.

  2. 'Tabstop' ve 'shiftwidth' i istediğiniz gibi ayarlayın ve 'expandtab'ı kullanın. Bu şekilde her zaman boşluk ekleyeceksiniz. 'Tabstop' değiştirildiğinde biçimlendirme asla bozulmaz.

  3. 'Tabstop' ve 'shiftwidth' değerlerini istediğiniz gibi ayarlayın ve | modeline | dosyayı yeniden düzenlerken bu değerleri ayarlamak için. Yalnızca dosyayı düzenlemek için Vim kullanılırken çalışır.

  4. Her zaman 'tabstop' ve 'shiftwidth' değerlerini aynı değere ve 'noexpandtab' değerine ayarlayın. Bu, daha sonra insanların kullandığı sekme ayarı için (yalnızca ilk girintiler için) çalışmalıdır. Bunu yapmazsanız, ilk boş olmayan boşluktan sonra boşluk olarak eklenen sekmeler olması iyi olabilir. Aksi takdirde, 'tabstop' değiştirildiğinde 'hizalanmış yorumlar yanlış olur.


Ayrıca, daha sonra muhtemelen fikrinizi değiştirme konusunda çok fazla endişelenmeyin ... :help retab( bkz .! Varyantını kontrol edin).
Michał Marczyk

Autocmd kullanımı .vimrc veya bir alternatif kullanmayı tamamlıyor mu?
Josh Desmond

225
:set tabstop=4
:set shiftwidth=4
:set expandtab

Bu, sekme karakteri yerine dört boşluk ekler. Boşluklar biraz daha “kararlıdır”, yani boşluklarla girintili metinler tarayıcıda ve diğer uygulamalarda aynı görünür.


83
Evet, ancak sekmeler semantiktir (her sekme 1 girinti tabakası anlamına gelir), boşluklar ise tamamen sunum amaçlıdır. Başka bir deyişle, sekmeleri kullanmak, kodunuzu görüntüleyen diğer kişilerin rahat oldukları kadar geniş görüntülemelerini sağlarken boşluklar buna izin vermez.
K Prime

11
Not olduğunu İsterseniz '>' ve '<' ile aynı mesafe metninizi taşımak için sekme -tuşu, sadece olabilir :set shiftwidth=0bu her zaman o maç için istediğiniz vim söyler çünkü vimrc ve sonsuza dek unut tabstop.
SeldomNeedy

133

Bir oturumda değişiklik yapmak için şu komutu kullanın:

:set tabstop=4

Değişikliği kalıcı hale getirmek için ~/.vimrcveya öğesine ekleyin ~/.vim/vimrc:

set tabstop=4

Bu sadece css'i değil tüm dosyaları etkiler. Yalnızca css dosyalarını etkilemek için:

autocmd Filetype css setlocal tabstop=4

Michał'nın cevabında belirtildiği gibi .


2
sekmenin dört boşluk olarak çalışmasını istiyorsanız, @Zoul yanıtındaki diğer satırları da .vimrc'ye eklemeniz gerekir; yani, .vimrc'ye 'set shiftwidth = 4' ve 'set expandtab'ı da ekleyin.
qartal

7
Soru "Vim'de sekme boyutunu nasıl değiştirebilirim?"
Keith

Ben böyle yapardım. Ve ~/.vimrcher zaman yedeklendiğinden emin olmak için, genellikle dosyayı Dropbox klasörüme kaydedip masaüstüne bir sym bağlantısı oluştururum:ln -s /home/myfolder/Dropbox/.vimrc ~
enchance

41

Bu sayfadaki cevapların birçoğu açıklanan soruna 'tek kullanımlık' düzeltmelerdir. Yani, vim ile bir belgeyi bir sonraki açışınızda önceki sekme ayarları geri dönecektir.

Sekme ayarlarını kalıcı olarak değiştirmek isteyen varsa:


11
Bu sekmeler değil boşluklar ekler.
Supernovah

5
@Supernovah sekmeleri almak için, "expandtab" kaldırabilirsiniz
kommradHomer

28

Vim'e bir astar olarak :

:set tabstop=4 shiftwidth=4 expandtab

İçin kalıcı kurulum , şu satırları ekleyin ~ / .vimrc :

set tabstop=4
set shiftwidth=4
set expandtab

6

GÜNCELLEME

Belirli bir projede çalışıyorsanız editorconfig kullanmanızı tavsiye ederim .

Deponuzun .editorconfigkökünde, deponuzdaki her dosya türü için kullanmak istediğiniz girintiyi tanımlayan bir dosya tanımlamanızı sağlar .

Örneğin:

root = true

[*.css]
charset = utf-8
indent_style = space
indent_size = 4

[*.js]
charset = utf-8
indent_style = space
indent_size = 2

Açtığınız dosyanın yapılandırma dosyasına göre vim'i otomatik olarak yapılandıran bir vim eklentisi vardır.

Bunun üzerine, .editorconfigdosya diğer birçok IDE ve editörde otomatik olarak desteklenir, bu nedenle farklı ortamlara sahip kullanıcılar arasında işbirliği yapmak için en iyi seçenektir.

ORİJİNAL CEVAP

Boyutları sık sık değiştirmeniz gerekiyorsa ve bunu belirli bir dosya türüne bağlamak istemiyorsanız, tercihleri ​​hızlı bir şekilde değiştirmek için .vimrc dosyanızda önceden tanımlanmış komutlara sahip olabilirsiniz:

nmap <leader>t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
nmap <leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>

Bu, iki farklı boyut kümesini \ t ve \ m tuşlarıyla eşler. Bunu istediğiniz tuşlara yeniden bağlayabilirsiniz.

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.