Hoe maak ik vi–Vimgebruik 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 on
in je vimrc te gebruiken. Dan kun je bijvoorbeeld dingen als set sw=4 sts=4 et
in .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 .vimrc
bestand 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 kbd>+ ZZ kbd>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 kbd>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
, shiftwidth
en 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 expandtab
is 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 smarttab
heeft 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
, tabstop
en expandtab
.
De parameter shiftwidth
bepaalt 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 noexpandtab
de 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 expandtab
is ingeschakeld, en als je je inspringing beheert via alle juiste Vim-mechanismen, wordt de waarde van tabstop
irrelevant. Het bepaalt hoe tabbladen worden weergegeven als ze in het bestand voorkomen. Als u set tabstop=8 expandtab
heeft 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.