Wie richte ich vim ein, um sowohl Makefile- als auch normale Codedateien zu bearbeiten?

22

Ich benutze Mac OSX 10.7.5, der Inhalt von .vimrc ist wie folgt:

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set shiftround  
set smarttab    
set autoindent  
set copyindent  

autocmd FileType make setlocal noexpandtab

Was ich versuche, ist, wenn ich normale Dateien wie .js, .html bearbeite. Ich möchte, dass meine Registerkarten mit 4 Leerzeichen anstelle einer normalen Registerkarte eingerückt werden.

Aber wenn ich Makefile bearbeite, muss es eine normale Registerkarte sein, anstatt 4 Leerzeichen für Einrückungen.

Ich dachte, das obige Setup in .vimrc gibt mir das, funktioniert aber nicht für mich, da ich beim Bearbeiten von Makefile immer noch 4 Leerzeichen zum Einrücken bekomme.

Nicht sicher, was ich hier falsch mache?

Waldclown
quelle

Antworten:

26

Dies ist ein Ausschnitt aus meinem .vimrc:

" enable filetype detection:
filetype on
filetype plugin on
filetype indent on " file type based indentation

" recognize anything in my .Postponed directory as a news article, and anything
" at all with a .txt extension as being human-language text [this clobbers the
" `help' filetype, but that doesn't seem to prevent help from working
" properly]:
augroup filetype
  autocmd BufNewFile,BufRead */.Postponed/* set filetype=mail
  autocmd BufNewFile,BufRead *.txt set filetype=human
augroup END

autocmd FileType mail set formatoptions+=t textwidth=72 " enable wrapping in mail
autocmd FileType human set formatoptions-=t textwidth=0 " disable wrapping in txt

" for C-like  programming where comments have explicit end
" characters, if starting a new line in the middle of a comment automatically
" insert the comment leader characters:
autocmd FileType c,cpp,java set formatoptions+=ro
autocmd FileType c set omnifunc=ccomplete#Complete

" fixed indentation should be OK for XML and CSS. People have fast internet
" anyway. Indentation set to 2.
autocmd FileType html,xhtml,css,xml,xslt set shiftwidth=2 softtabstop=2

" two space indentation for some files
autocmd FileType vim,lua,nginx set shiftwidth=2 softtabstop=2

" for CSS, also have things in braces indented:
autocmd FileType css set omnifunc=csscomplete#CompleteCSS

" add completion for xHTML
autocmd FileType xhtml,html set omnifunc=htmlcomplete#CompleteTags

" add completion for XML
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags

" in makefiles, don't expand tabs to spaces, since actual tab characters are
" needed, and have indentation at 8 chars to be sure that all indents are tabs
" (despite the mappings later):
autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

" ensure normal tabs in assembly files
" and set to NASM syntax highlighting
autocmd FileType asm set noexpandtab shiftwidth=8 softtabstop=0 syntax=nasm

Der Abschnitt sollte selbsterklärend sein, aber ich schlage vor, Sie lesen die VIM-Hilfe auf filetypeund autocmd.

Die für Sie relevanteste Zeile ist wahrscheinlich die folgende:

autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

Stellen Sie jedoch sicher, dass die Dateityperkennung aktiviert ist.

Polemon
quelle
Danke für die hervorragenden Autokommandos! Ich bemerkte in diesem Tutorial , während aus dem Lernen , .vimrcdass , wenn Sie nicht über Ihre wickeln autocmds in augroupAbschnitten, Vim diese in und duplizieren sie lesen wird. Ist das richtig?
Joshua Detwiler
6

Anstatt dies mit autocmds zu tun, können Sie für jeden Dateityp ein eigenes Benutzer-Dateityp-Plug-in erstellen und dort ablegen ~/.vim/ftplugin/<filetype>.vim, wo <filetype>der gewünschte Dateityp ist. Beispielsweise:

mkdir -p ~/.vim/ftplugin
echo "setlocal noexpandtab" > ~/.vim/ftplugin/make.vim

Sie müssen sicherstellen, dass Dateityp-Plugins in Ihrem ~/.vimrcmit dem folgenden Befehl aktiviert sind :

filetype plugin on
Heptit
quelle
Diese Antwort ist sinnvoller, wenn Sie die Verzeichnisse .vimrc und .vim aufgeräumt halten möchten.
Floby
0

Es ist einfacher, vim so zu konfigurieren, dass Registerkarten immer erweitert werden. Dies ist für alle Dateien mit Ausnahme von Makefiles erforderlich. In Makefiles können Sie eine Registerkarte einfügen, wo immer Sie möchten. Es wird nicht erweitert.

zeozod
quelle