Sekmeyi 4 boşluk olarak yeniden tanımla


1094

Geçerli ayarımda 8 boşluk var; nasıl yeniden tanımlayabilirim?


4
Daha da iyisi, dört boşluğa ayarlayın ve aynı anda otomatik girintiyi etkinleştirin: 4
genişliğe

7
@ heinrich5991 Anlamıyorum. Bir satır girintili olduğunu fark etmek için 8 boşluk gerekmez ve gerekenden daha uzun bir metin satırında (en azından sarma önce) görüntüleyebileceğiniz karakterleri sınırlamak anlamına gelir. Ama her biri kendi için. :)
weberc2

40
@ heinrich5991 Benim argümanım "girintili bir satırı kolayca tanımlamak için mümkün olduğunca az kullan". Benim tahminime göre, bir girintiyi kolayca tanımlama yeteneği <3 boşlukta hızla düşer ve 4 boşlukta artmayı bırakır. Bu nedenle, 4 alanı aşan girinti benim deneyimlerime göre bir israftır.
weberc2

7
@ weberc2 Daha fazla anlaşamadık dostum. Bu yüzden her biri girintileme için 2 boşluk kullanan Ruby veya "modern JavaScript" i çok klostrofobik okumayı hissediyorum. Ağır şekilde iç içe geçmiş yapıları takip etmeye çalışırken bana göz yorgunluğunu veriyor. Lanet olsun kazanmak için zor sekmeler.

Yanıtlar:


1616

Ne demek istediğine bağlı. Dosyanızdaki gerçek sekme karakterlerinin 4 boşluk genişliğinde görünmesini istiyor musunuz , yoksa "sekme" ile gerçekten sekme tuşuna basılarak oluşturulan ve tam anlamıyla 4 boşluk karakteri içeren (en çok) karakter içeren bir girinti yazdığınız her "sekme"?

Yanıtınıza bağlı olarak, aşağıdaki ayar gruplarından birinin sizin için çalışması gerekir:

  • 4 boşluk genişliğinde görünen sekme karakterleri için :

    set tabstop=4
    

    Kaynak kodunuzda gerçek sekme karakteri kullanıyorsanız, muhtemelen bu ayarları da istersiniz (bunlar aslında varsayılanlardır, ancak bunları defansif olarak ayarlamak isteyebilirsiniz):

    set softtabstop=0 noexpandtab
    

    Son olarak, bir girintinin tek bir sekmeye karşılık gelmesini istiyorsanız, şunları da kullanmalısınız:

    set shiftwidth=4
    
  • 4 boşluk karakteri içeren ancak sekme tuşuyla girilen girintiler için :

    set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab
    

Yukarıdaki ayarları kalıcı yapmak için bu satırları vimrc'nize ekleyin .

Ayarlamalar yapmanız veya yalnızca bu seçeneklerin ne anlama geldiğini anlamak istiyorsanız, her seçeneğin ne anlama geldiğinin bir dökümü:

tabstop

"Boşluklarda" ölçülen sert sekmenin genişliği - gerçek bir sekme karakterinin etkin (maksimum) genişliği.

shiftwidth

"Girintinin" boyutu. Boşluklarda da ölçülür, bu nedenle kod tabanınız sekme karakterleriyle girintiliyorsa, sekme karakteri shiftwidthsayısına eşittir tabstop. Bu =, >ve <komutları gibi şeyler tarafından da kullanılır .

softtabstop

Bunu sıfır dışında bir değere ayarlamak tabstop, sekme tuşunun (ekleme modunda) , bu genişlikte sekme duraklarını simüle etmek için boşlukların (ve muhtemelen sekmelerin) bir kombinasyonunu eklemesini sağlar .

expandtab

Bunu etkinleştirdiğinizde, sekme tuşu (ekleme modunda) sekme karakterleri yerine boşluk eklenir. Bu aynı zamanda retabkomutun davranışını da etkiler .

smarttab

Bunu etkinleştirmek, sekme tuşunun (ekleme modunda), imleç bir satırın başındayken bir sonraki sekmenin bir sonraki girintisine gitmek için boşluklar veya sekmeler ekleyecektir (yani yalnızca önceki karakterler boşluktur).

Bunlardan birini daha fazla detay için bkz (örn vim ):help 'optionname':help 'tabstop'


18
Makefile'lerin her zaman sabit sekme karakterleri kullanmasını sağlamak da önemlidir, aksi takdirde derlemeler başarısız olur! Nasıl yapılacağını gösterdim, stackoverflow.com/questions/234564/…
Shervin Emami

29
@Undefined Bu sistem vim ayarları. ~/.vimrckullanıcının vim ayarlarıdır. Çoğu kişi sistem ayarlarını yalnız bırakır ve yalnızca kullanıcı ayarlarını düzenler. ~/.vimrcÇoğu sistemde oluşturulana kadar var olmayacağını unutmayın .
Laurence Gonsalves

4
Vim kullanıcıları bu set softtabstop=4özelliği not ediyor ! (Sistemin geri kalanı aksini düşünmesine rağmen) sekmeyi rasgele sayıda boşluk olarak yeniden tanımladığınız için kodunuzu lessveya dışında başka bir düzenleyiciyle okumaya çalışmaktan bıktım vim! :-)
Ogre Psalm33

6
Birisi bu cevabın neden 4tabstop=8 boşluktan oluşan girintiler için kullanıldığını söylediğini anlamama yardımcı olabilir mi? Çeşitli ayarların açıklamalarını okuduktan sonra sebebini anlayamadım. Başka bir cevap kullanmak benim için biraz daha mantıklı olduğunu söylüyor. tabstop=4
Kodos Johnson

5
@KodosJohnson tabstopSeçenek, sabit sekme karakterinin genişliğini denetler. Girintilerinizin 4 genişlikteki tek sekme karakterleri yerine 4 boşluk karakterinden oluşmasını istiyorsanız, sekme karakterinizin genişliği önemli değildir - bir çeşit . Pratikte, sekme karakterlerinin uygun girintiler gibi görünme olasılığını azaltmak için muhtemelen sekme karakteri genişliğinizin girintilerinizin genişliğinden farklı olmasını istersiniz . ( list+ expandtabburada da yardımcı olabilir) Ayrıca, 8 karakter genişliğinde sekmeler "standart" dır - terminaliniz, Python ve diğer birçok araç varsayılan olarak 8 karakter genişliğinde sekmelerdir.
Laurence Gonsalves

745

Bunu geçerli kullanıcı için kalıcı olarak tanımlamak üzere .vimrcdosyayı oluşturun (veya düzenleyin) :

$ vim ~/.vimrc

Ardından, aşağıdaki yapılandırmayı dosyaya yapıştırın. Vim yeniden başlatıldığında, sekme ayarları uygulanır.

set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.

set shiftwidth=4    " Indents will have a width of 4

set softtabstop=4   " Sets the number of columns for a TAB

set expandtab       " Expand TABs to spaces

~ / .Vimrc dosyanız yoksa, / etc / vim / vimrc ile deneyin. Benim durumumda Ubuntu 16.04 üzerinde yapılandırma dosyası var. Ancak, bu dosyanın değiştirilmesinin yapılandırmanın genel olarak kullanılmasına neden olacağını unutmayın.
Todor Todorov

4
Bir şey daha, var :retabolan dönüştürmek tabiçin kullanın spaces. vim.wikia.com/wiki/Converting_tabs_to_spaces
DawnSong

57

veya vim modelin için stenografi:

vim :set ts=4 sw=4 sts=4 et :

28

Boşluk veya sekme kullanılıp kullanılmayacağını tanımlayan birkaç ayar vardır.

İşte ~/.vimrcdosyanızda tanımlanabilecek kullanışlı işlevler :

function! UseTabs()
  set tabstop=4     " Size of a hard tabstop (ts).
  set shiftwidth=4  " Size of an indentation (sw).
  set noexpandtab   " Always uses tabs instead of space characters (noet).
  set autoindent    " Copy indent from current line when starting a new line (ai).
endfunction

function! UseSpaces()
  set tabstop=2     " Size of a hard tabstop (ts).
  set shiftwidth=2  " Size of an indentation (sw).
  set expandtab     " Always uses spaces instead of tab characters (et).
  set softtabstop=0 " Number of spaces a <Tab> counts for. When 0, featuer is off (sts).
  set autoindent    " Copy indent from current line when starting a new line.
  set smarttab      " Inserts blanks on a <Tab> key (as per sw, ts and sts).
endfunction

Kullanımı:

:call UseTabs()
:call UseSpaces()

Dosya uzantıları başına kullanmak için aşağıdaki sözdizimi kullanılabilir (eklenebilir .vimrc):

au! BufWrite,FileWritePre *.module,*.install call UseSpaces()

Ayrıca bkz: Sekmeleri boşluklara dönüştürme .


Wikia'dan sekmeler ve boşluklar arasında geçiş yapmak için kullanılabilecek başka bir snippet :

" virtual tabstops using spaces
set shiftwidth=4
set softtabstop=4
set expandtab
" allow toggling between local and default mode
function TabToggle()
  if &expandtab
    set shiftwidth=8
    set softtabstop=0
    set noexpandtab
  else
    set shiftwidth=4
    set softtabstop=4
    set expandtab
  endif
endfunction
nmap <F9> mz:execute TabToggle()<CR>'z

Her sekme için 4 boşluk F9ve ayarları değiştirmek için bir eşleme kullanılmasını sağlar .


27

Bunu kopyalayıp .vimrc dosyama yapıştırdım:

" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters
set expandtab

" size of an "indent"
set shiftwidth=4

İlk 2 ayar Sekme tuşuna bastığımda 4 boşluk alacağım anlamına geliyor. Üçüncü ayar, yaptığım zaman V>(yani görsel ve girinti) 4 boşluk elde ettiğim anlamına gelir .

Kabul edilen cevap kadar kapsamlı değil, ancak bir şey kopyalayıp yapıştırmak isteyen insanlara yardımcı olabilir.


14

İstediğiniz ayarları ~ / .vimrc dosyasına koyun - Bazı yönergeler ve en iyi uygulamalar için aşağıya bakın.

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.

    Not: 'tabstop'u 8'den başka bir değere ayarlamak, dosyanızın birçok yerde yanlış görünmesine neden olabilir (örneğin, yazdırırken).

  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, kullanıcıları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.

Kaynak:


Tabstop! = 8 ayarının neden kötü olabileceğini açıklamak için +1!
Ogre Psalm33

3
Bu harika, ama bunun vimdoc.sourceforge.net/htmldoc/options.html#'tabstop ' dan veya vim'den kelimesi kelimesine olduğuna dikkat etmelisiniz :help tabstop.
belacqua



6

Satırı ekleyin
set ts=4
içinde
~/.vimrckullanıcı başına için dosyanın
veya
/etc/vimrcsistem genişliğindeki için dosyanın


2

Benim temel ~ / .vimrc yorum ile:

set number " show line number                                                                                           
set tabstop=2 " set display width of tab; 1 tab = x space with                                                           
set expandtab " transform tab to x space (x is tabstop)                                                               
set autoindent " auto indent; new line with number of space at the beginning same as previous                                                                      
set shiftwidth=2 " number of space append to lines when type >> 

0

Tüm kullanıcılar için kalıcı (sunucuda yalnız olduğunuzda):

# echo "set tabstop=4" >> /etc/vim/vimrc

Normalde yeni sunucu apt-get purge nano mcve diğer tüm zaman kazanmak için. Aksi takdirde git, crontabvb. İçindeki düzenleyiciyi yeniden tanımlayacaksınız.


1
EDITOR'u ayarlarsanız, çoğu program buna saygı duyar.
D. Ben Knoble

@ D.BenKnoble haklısınız. denedim. şimdilik zamanımı ve sinirlerimi kurtarmayı tercih ediyorum. Tam olarak çalışır neyi kontrol edemez F10içinde nanoama her zaman tasarrufu ile numara yapıyorlar (belki F10bir çözümdür). ya da çalışmıyor screen? Hatırlayamıyorum, sadece nefret ediyorum)
Vasilii Suricov

neyse geçmişte ...
Vasilii Suricov
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.