Tab-toets == 4 spaties en automatisch inspringen na accolades in Vim

Hoe maak ik viVimgebruik nooit tabs (spaties omzetten in tabs, slecht!), maakt de tab-toets == 4 spaties, en laat code automatisch inspringen na gekruld steunblokken zoals Emacsdoet?

Hoe sla ik deze instellingen op, zodat ik ze nooit meer hoef in te voeren?

Ik heb hier andere vragen over gezien, maar het lijkt altijd een beetje af te wijken van wat ik wil.


Antwoord 1, autoriteit 100%

Zoals in een aantal andere antwoorden is aangegeven, is de voorkeursmethode nu NIET om smartindent te gebruiken, maar in plaats daarvan het volgende te gebruiken (in uw .vimrc):

filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab


In je [.vimrc:][1]-bestand:

set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

Aan de helpbestanden moet je even wennen, maar hoe meer je leest, hoe beter Vim wordt:

:help smartindent

Nog beter, u kunt deze instellingen in uw bron opnemen voor overdraagbaarheid:

:help auto-setting

Uw huidige instellingen bekijken:

:set all

Zoals graywhin de opmerkingen aangeeft, is smartindent vervangen door cindent dat “slimmer werkt”, hoewel nog steeds voornamelijk voor talen met C-achtige syntaxis:

:help C-indenting


Antwoord 2, autoriteit 13%

Aanverwant, als u een bestand opent dat zowel tabs als spaties gebruikt, ervan uitgaande dat u

set expandtab ts=4 sw=4 ai

Je kunt alle tabs vervangen door spaties in het hele bestand met

:%retab

Antwoord 3, autoriteit 5%

De beste manier om bestandstype-specifieke inspringing te krijgen, is door filetype plugin indent onin je vimrc te gebruiken. Dan kun je bijvoorbeeld dingen als set sw=4 sts=4 etin .vim/ftplugin/c.vim specificeren, zonder dat je die globaal hoeft te maken voor alle bestanden die worden bewerkt en andere niet-C typesyntaxis worden ook correct ingesprongen (zelfs lisps).


Antwoord 4, autoriteit 3%

Om tabs met 4 spaties in de meeste bestanden, echte 8-brede tab-tekens in Makefiles en automatisch inspringen in verschillende bestanden, waaronder C/C++, plaatst u dit in uw ~/.vimrc-bestand:

" Only do this part when compiled with support for autocommands.
if has("autocmd")
    " Use filetype detection and file-based automatic indenting.
    filetype plugin indent on
    " Use actual tab chars in Makefiles.
    autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab
endif
" For everything else, use a tab width of 4 space chars.
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.

Antwoord 5, autoriteit 3%

Op veel Linux-systemen, zoals Ubuntu, bestaat de .vimrcbestand niet standaard, dus het wordt aanbevolen om het eerst te maken.

Gebruik de .viminfo-bestand dat bestaat in de thuisgids. Het wordt gebruikt voor een ander doel.

Stap 1: Ga naar uw thuisgids

cd ~

Stap 2: maak het bestand

vim .vimrc

Stap 3: Voeg de hierboven vermelde configuratie toe

filetype plugin indent on
set tabstop=4
set shiftwidth=4
set expandtab

Stap 3: Bestand opslaan door op SHIFT + ZZ te drukken.


Antwoord 6, Autoriteit 2%

De aanbevolen manier is om de opmerkingen op basis van filetype te gebruiken en alleen slimindent en caindent te gebruiken als dat niet voldoende is.

Voeg het volgende toe aan uw .vimrc

set expandtab
set shiftwidth=2
set softtabstop=2
filetype plugin indent on

Ik hoop dat het helpt als een ander antwoord.


Antwoord 7

Bewerk uw ~ / .vimrc

$ vim ~/.vimrc

Voeg de volgende regels toe:

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab

Antwoord 8

van de vim wiki :

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

Antwoord 9

Het automatische streepje is gebaseerd op de huidige syntaxisemodus. Ik weet dat als u foo.java bewerkt, en vervolgens een {invoeren en invoert Instrekken in de volgende regel.

Wat betreft tabbladen, zijn er twee instellingen. Typ in VIM een dubbele punt en vervolgens op "Stel TabStop = 4" in die de tabbladen instellen om als vier spaties weer te geven. Hit Colon opnieuw en typ "Set ExpandTab" die spaties inzet voor tabbladen.

U kunt deze instellingen in een .vimrc (of _vimrc op Windows) in uw homedirectory plaatsen, zodat u ze maar één keer hoeft in te voeren.


Antwoord 10

U kunt tenslotte de .vimrc bewerken en vervolgens de conf toevoegen

set tabstop=4

Of voer het commando uit


Antwoord 11

Gebruik ten eerste de Tab-toets in Vim niet voor handmatig inspringen. Vim heeft een paar commando's in de invoegmodus voor het handmatig vergroten of verkleinen van de inspringing. Die commando's zijn Ctrl-Ten Ctrl-D. Deze commando's houden rekening met de waarden van tabstop, shiftwidthen expandtab, en behouden de juiste combinatie van spaties en tabs (maximaal aantal tabs gevolgd door een willekeurige benodigde aantal spaties).

Ten tweede hoeven deze handmatige inspringtoetsen toch niet veel te worden gebruikt als u automatisch inspringen gebruikt.

Als Ctrl-Tin plaats van Tabu stoort, kunt u het opnieuw toewijzen:

:imap <Tab> ^T

Je kunt ook Shift-Tabopnieuw toewijzen om de Ctrl-Ddeindent te doen:

:imap <S-Tab> ^D

Hier zijn ^T en ^D letterlijke controletekens die kunnen worden ingevoegd als Ctrl-VCtrl-T.

Met deze toewijzing kun je nog steeds de letterlijke Tab in de buffer typen met Ctrl-VTab. Merk op dat als u dit doet, zelfs als :set expandtabis ingeschakeld, u een niet-uitgevouwen tabteken krijgt.

Een soortgelijk effect als de <Tab>-kaart wordt bereikt met behulp van :set smarttab, wat er ook voor zorgt dat backspace aan de voorkant van een regel slim wordt.

In de modus smarttabheeft het geen speciale betekenis als Tabniet aan het begin van een regel wordt gebruikt. Dat is anders dan mijn bovenstaande toewijzing van Tabnaar Ctrl-T, omdat een Ctrl-Tdie overal in een regel wordt gebruikt (in invoegmodus) vergroot de inspringing van die regel.

Andere nuttige toewijzingen kunnen zijn:

:map <Tab> >
:map <S-Tab> <

Nu kunnen we dingen doen zoals het selecteren van enkele regels en op Tabdrukken om ze te laten inspringen. Of druk tweemaal op Tabop een regel (in opdrachtmodus) om de inspringing te vergroten.

Als je de juiste commando's voor inspringbeheer gebruikt, wordt alles geregeld door de drie parameters: shiftwidth, tabstopen expandtab.

De parameter shiftwidthbepaalt de grootte van uw inspringing; als je vier spaties wilt gebruiken, gebruik dan :set shiftwidth=4, of de afkorting :set sw=4.

Als dit alleen wordt gedaan, wordt inspringing gemaakt met een combinatie van spaties en tabs, omdat noexpandtabde standaard is. Gebruik :set expandtab. Dit zorgt ervoor dat tabtekens die u in de buffer typt, worden uitgevouwen tot spaties en dat voor door Vim beheerde inspringing alleen spaties worden gebruikt.

Als expandtabis ingeschakeld, en als je je inspringing beheert via alle juiste Vim-mechanismen, wordt de waarde van tabstopirrelevant. Het bepaalt hoe tabbladen worden weergegeven als ze in het bestand voorkomen. Als u set tabstop=8 expandtabheeft en vervolgens een harde tab in het bestand sluipt met behulp van Ctrl-VTab, zal het een uitlijning produceren met de volgende op 8 kolommen gebaseerde tabpositie, zoals gewoonlijk.

Other episodes