Przedefiniuj tabulator jako 4 spacje

1094

Moje obecne ustawienie zakłada 8 spacji; jak mogę to przedefiniować?

Ricky
źródło
4
Jeszcze lepiej, ustaw go na cztery spacje i włącz jednocześnie automatyczne wcięcie: Automatyczne wcięcie z szerokością tabulacji ustawioną na 4 spacje
solid_liq
7
@ heinrich5991 Nie rozumiem. Nie potrzebuję 8 spacji, aby uświadomić sobie, że linia jest wcięta, a więcej niż to konieczne oznacza ograniczenie znaków, które można wyświetlić w długim wierszu tekstu (przynajmniej przed zawijaniem). Ale każdemu jego. :)
weberc2
40
@ heinrich5991 Moim argumentem jest: „używaj jak najmniej, aby łatwo zidentyfikować wcięcie”. Według moich szacunków, zdolność do łatwej identyfikacji wcięcia spada gwałtownie na <3 spacje i przestaje rosnąć na 4 spacjach. Dlatego wcięcie, które przekracza 4 spacje, jest z mojego doświadczenia marnotrawstwem.
weberc2
7
@ weberc2 Nie mogłem więcej zgodzić się, kolego. Dlatego czuję się tak cholernie klaustrofobicznie, czytając Ruby lub „współczesny JavaScript”, z których każda używa wcięć z 2 spacjami. Słusznie męczy mnie wzrok, gdy próbuję podążać za mocno zagnieżdżonymi strukturami. Twarde karty do cholernej wygranej.
Możliwy duplikat Zastąp kartę spacjami w VIM
rofrol

Odpowiedzi:

1615

To zależy od tego, co masz na myśli. Chcesz rzeczywiste znaki tabulacji w pliku do pojawiają 4 spacje szerokie, lub „Tab” czy rzeczywiście oznacza wcięcie , generowany przez naciśnięcie klawisza TAB, co doprowadziłoby do pliku dosłownie zawierające (do) 4 znaków spacji dla każdą „kartę”, którą wpisujesz?

W zależności od odpowiedzi jeden z poniższych zestawów ustawień powinien działać dla Ciebie:

  • W przypadku znaków tabulacji o szerokości 4 spacji :

    set tabstop=4
    

    Jeśli używasz rzeczywistego znaku tabulacji w kodzie źródłowym, prawdopodobnie również chcesz te ustawienia (tak naprawdę są to ustawienia domyślne, ale możesz chcieć je ustawić obronnie):

    set softtabstop=0 noexpandtab
    

    Wreszcie, jeśli chcesz, aby wcięcie odpowiadało jednej karcie, powinieneś również użyć:

    set shiftwidth=4
    
  • W przypadku wcięć składających się z 4 znaków spacji, ale wprowadzanych za pomocą klawisza tab:

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

Aby powyższe ustawienia były trwałe, dodaj te linie do vimrc .

Jeśli chcesz wprowadzić zmiany lub po prostu chcesz zrozumieć, co oznaczają te wszystkie opcje, oto podział na poszczególne opcje:

tabstop

Szerokość twardego tabulatora mierzona w „spacjach” - w rzeczywistości (maksymalna) szerokość rzeczywistego znaku tabulacji.

shiftwidth

Rozmiar „wcięcia”. Jest również mierzony w odstępach, więc jeśli podstawa kodu wcina się znakami tabulacji, to chcesz shiftwidthrównać się liczbie znaków tabulacji tabstop. To jest również wykorzystywany przez takie rzeczy jak =, >i <poleceń.

softtabstop

Ustawienie na niezerową wartość inną niż tabstopspowoduje, że klawisz tabulatora (w trybie wstawiania) wstawi kombinację spacji (i ewentualnie tabulatorów), aby zasymulować tabulatory na tej szerokości.

expandtab

Włączenie tego spowoduje, że klawisz tabulacji (w trybie wstawiania) wstawi spacje zamiast znaków tabulacji. Wpływa to również na zachowanie retabpolecenia.

smarttab

Włączenie tego spowoduje, że klawisz tabulacji (w trybie wstawiania) wstawi spacje lub tabulatory, aby przejść do następnego wcięcia następnego tabstop, gdy kursor znajduje się na początku linii (tzn. Jedynymi poprzedzającymi znakami są białe znaki).

Aby uzyskać więcej informacji na temat któregokolwiek z nich zobacz vim (np. ):help 'optionname':help 'tabstop'

Laurence Gonsalves
źródło
18
Ważne jest również, aby upewnić się, że pliki Makefile zawsze używają znaków tabulacji, w przeciwnym razie kompilacje zakończą się niepowodzeniem! Pokazałem, jak to zrobić, na stackoverflow.com/questions/234564/…
Shervin Emami
29
@ Niezdefiniowane To są ustawienia systemu vim. ~/.vimrcto ustawienia vim użytkownika. Większość osób pozostawia ustawienia systemu w spokoju i po prostu edytuje ustawienia użytkownika. Pamiętaj, że ~/.vimrcnie będzie istniał, dopóki nie utworzysz go w większości systemów.
Laurence Gonsalves
4
Użytkownicy Vima zwracają uwagę na tę set softtabstop=4funkcję! Jestem zmęczony próbą odczytania kodu za pomocą lesslub dowolnego innego edytora, z wyjątkiem tego vim, aby zobaczyć dziwne wcięcia, ponieważ na nowo zdefiniowałeś tabulację, aby była dowolną liczbą spacji (nawet jeśli reszta systemu myśli inaczej)! :-)
Ogre Psalm33
6
Czy ktoś może mi pomóc zrozumieć, dlaczego ta odpowiedź mówi o używaniu tabstop=8wcięć składających się z 4 spacji? Po przeczytaniu opisów różnych ustawień nie mogłem znaleźć przyczyny. Inna odpowiedź mówi o użyciu, tabstop=4co ma dla mnie trochę więcej sensu.
Kodos Johnson
5
@KodosJohnson Ta tabstopopcja kontroluje szerokość znaku tabulacji. Jeśli chcesz, aby wcięcia składały się z 4 znaków spacji, a nie pojedynczych znaków tabulacji o szerokości 4 znaków, szerokość znaku tabulacji nie ma znaczenia - w pewnym sensie . W praktyce prawdopodobnie chcesz, aby szerokość znaków tabulacji różniła się od szerokości wcięć, aby zmniejszyć prawdopodobieństwo, że tabulatory będą maskować się jako właściwe wcięcia. ( list+ też expandtabmoże tutaj pomóc). Również karty o szerokości 8 znaków są „standardowe” - twój terminal, Python i wiele innych narzędzi domyślnie mają karty o szerokości 8 znaków.
Laurence Gonsalves
744

Aby zdefiniować to na stałe dla bieżącego użytkownika, utwórz (lub edytuj) .vimrcplik:

$ vim ~/.vimrc

Następnie wklej poniższą konfigurację do pliku. Kiedy vim zostanie zrestartowany, ustawienia karty zostaną zastosowane.

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
Alan Haggai Alavi
źródło
Jeśli nie masz ~ / .vimrc, spróbuj z / etc / vim / vimrc. W moim przypadku na Ubuntu 16.04 plik konfiguracyjny jest tam. Pamiętaj jednak, że zmiana tego pliku spowoduje globalne użycie konfiguracji.
Todor Todorov
4
Jeszcze jedno, użycie :retabprzekonwertować istniejący tabdo spaces. vim.wikia.com/wiki/Converting_tabs_to_spaces
DawnSong
57

lub skrót od vim modeline:

vim :set ts=4 sw=4 sts=4 et :
zen
źródło
28

Istnieje kilka ustawień, które określają, czy używać spacji, czy tabulatorów.

Oto przydatne funkcje, które można zdefiniować w ~/.vimrcpliku:

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

Stosowanie:

:call UseTabs()
:call UseSpaces()

Aby użyć go dla rozszerzeń plików, można użyć (dodać do .vimrc) następującej składni :

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

Zobacz także: Konwertowanie tabulatorów na spacje .


Oto kolejny fragment Wikii, którego można używać do przełączania między tabulatorami i spacjami :

" 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

Umożliwia użycie 4 spacji dla każdej karty i mapowanie w F9celu przełączania ustawień.

kenorb
źródło
27

Skopiowałem i wkleiłem to do mojego pliku .vimrc:

" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters
set expandtab

" size of an "indent"
set shiftwidth=4

Pierwsze 2 ustawienia oznaczają, że kiedy naciskam Tab, dostaję 4 spacje. Trzecie ustawienie oznacza, że ​​kiedy to zrobię V>(tj. Wizualnie i wcięcie), dostaję również 4 spacje.

Nie jest tak wyczerpująca, jak zaakceptowana odpowiedź, ale może pomóc osobom, które chcą tylko coś skopiować i wkleić.

Snowcrash
źródło
14

Umieść wybrane ustawienia w pliku ~ / .vimrc - poniżej znajdziesz wskazówki i najlepsze praktyki.

Istnieją cztery główne sposoby używania kart w Vimie:

  1. Zawsze trzymaj „tabstop” na 8, ustaw „softtabstop” i „shiftwidth” na 4 (lub 3 lub cokolwiek wolisz) i używaj „noexpandtab”. Następnie Vim użyje kombinacji tabulatorów i spacji, ale pisanie i będzie zachowywać się tak, jakby tabulator pojawiał się co 4 (lub 3) znaki.

    Uwaga: Ustawienie „tabstop” na wartość inną niż 8 może spowodować, że plik będzie wyglądał nieprawidłowo w wielu miejscach (np. Podczas drukowania).

  2. Ustaw „tabstop” i „shiftwidth” na cokolwiek wolisz i użyj „expandtab”. W ten sposób zawsze wstawisz spacje. Formatowanie nigdy nie zostanie pomieszane, gdy zmieni się „tabstop”.

  3. Ustaw „tabstop” i „shiftwidth” na cokolwiek wolisz i użyj | modeline | aby ustawić te wartości podczas ponownej edycji pliku. Działa tylko przy użyciu Vima do edycji pliku.

  4. Zawsze ustaw „tabstop” i „shiftwidth” na tę samą wartość i „noexpandtab”. Powinno to następnie działać (tylko w przypadku wcięć początkowych) dla każdego ustawienia tabstop, którego używają ludzie. Przydałoby się jednak wstawianie tabulatorów po pierwszym niepustym wstawieniu spacji, jeśli to zrobisz. W przeciwnym razie wyrównane komentarze będą niepoprawne po zmianie „tabstop”.

Źródło:

Elastyczne Myśli
źródło
+1 za wyjaśnienie, dlaczego ustawienie tabstop! = 8 może być złe!
Ogre Psalm33
3
To świetnie, ale należy pamiętać, że jest to dosłownie z vimdoc.sourceforge.net/htmldoc/options.html#'tabstop 'lub :help tabstopw vimie.
belacqua
6

Dodaj wiersz
set ts=4
w
~/.vimrcpliku dla użytkownika
lub
/etc/vimrcplik dla całego systemu

Alok Singh Mahor
źródło
2

Moje podstawowe ~ / .vimrc z komentarzem:

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 >> 
o0omycomputero0o
źródło
0

Stały dla wszystkich użytkowników (gdy jesteś sam na serwerze):

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

Zwykle na nowym serwerze apt-get purge nano mci wszystkich innych, aby zaoszczędzić czas. W przeciwnym razie będzie przedefiniować redaktor git, crontabetc

Vasilii Suricov
źródło
1
Jeśli ustawisz EDYTOR, większość programów będzie go przestrzegać.
D. Ben Knoble
@ D.BenKnoble masz rację. próbowałem. na razie wolę oszczędzać czas i nerwy. Nie można sprawdzić, co dokładnie działa ze F10w nanoale zawsze zrobić kilka sztuczek z save (być może F10jest to rozwiązanie). czy to nie działa screen? Nie pamiętam, po prostu go nienawidzę)
Vasilii Suricov
w każdym razie w przeszłości ...
Vasilii Suricov