วิธีการตั้งค่ากลุ่มเพื่อแก้ไขทั้ง Makefile และไฟล์รหัสปกติ?


22

ฉันใช้ Mac OSX 10.7.5 เนื้อหาของ. vimrc มีดังนี้:

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

autocmd FileType make setlocal noexpandtab

สิ่งที่ฉันพยายามจะทำคือเมื่อฉันแก้ไขไฟล์ปกติเช่น. js, .html ฉันต้องการให้แท็บเยื้องกับช่องว่าง 4 ช่องแทนที่จะเป็นแท็บปกติ

แต่เมื่อฉันแก้ไข Makefile ฉันต้องการให้เป็นแท็บปกติแทนที่จะเป็นช่องว่าง 4 อันสำหรับการเยื้อง

ฉันคิดว่าการตั้งค่าข้างต้นใน. vimrc จะให้สิ่งนั้นกับฉัน แต่ไม่ได้ผลสำหรับฉันเมื่อฉันกำลังแก้ไข Makefile ฉันยังคงมีช่องว่าง 4 ช่องสำหรับการเยื้อง

ไม่แน่ใจว่าฉันทำอะไรผิดที่นี่ใช่ไหม

คำตอบ:


26

นี่คือส่วนของฉัน.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

ส่วนที่ควรจะอธิบายตนเอง แต่ผมแนะนำให้คุณอ่านความช่วยเหลือเป็นกลุ่มบนและfiletypeautocmd

บรรทัดที่เกี่ยวข้องกับคุณมากที่สุดน่าจะเป็นสิ่งนี้:

autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

ตรวจสอบให้แน่ใจว่าได้เปิดการตรวจจับประเภทไฟล์แล้ว


ขอบคุณสำหรับคำแนะนำอัตโนมัติที่ยอดเยี่ยม! ฉันสังเกตเห็นในบทช่วยสอนนี้ในขณะที่เรียนรู้จากคุณ.vimrcว่าถ้าคุณไม่ห่อของคุณautocmdไว้ในaugroupส่วน Vim จะอ่านสิ่งเหล่านี้ในและทำซ้ำพวกเขา ถูกต้องหรือไม่
Joshua Detwiler

6

แทนการทำเช่นนี้กับ autocmds คุณสามารถสร้างปลั๊กอินผู้ใช้ filetype คุณเองสำหรับแต่ละ filetype และวางไว้ใน~/.vim/ftplugin/<filetype>.vimที่<filetype>เป็นประเภทของไฟล์ที่เกิดขึ้นจริงที่คุณต้องการ ตัวอย่างเช่น:

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

คุณต้องแน่ใจว่าคุณเปิดใช้งานปลั๊กอินชนิดไฟล์ใน~/.vimrcคำสั่งต่อไปนี้:

filetype plugin on

คำตอบนี้เหมาะสมกว่าหากคุณต้องการเก็บไดเรกทอรี. vimrc และ. vim ให้เป็นระเบียบ
Floby

0

มันง่ายกว่าที่จะกำหนดค่า vim ให้ขยายแท็บทุกครั้งซึ่งเป็นสิ่งที่ต้องการสำหรับไฟล์ทั้งหมดยกเว้น makefiles ใน makefiles คุณสามารถใช้เพื่อแทรกแท็บได้ทุกที่ที่คุณต้องการ มันจะไม่ขยายตัว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.