Làm cách nào để thiết lập vim để chỉnh sửa cả tệp Makefile và tệp thông thường?


22

Tôi đang sử dụng Mac OSX 10.7.5, nội dung của .vimrc như sau:

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

autocmd FileType make setlocal noexpandtab

Những gì tôi đang cố gắng làm là khi tôi chỉnh sửa các tệp bình thường như .js, .html Tôi muốn các tab của mình được thụt vào với 4 khoảng trống thay vì một tab bình thường.

Nhưng khi tôi chỉnh sửa Makefile, tôi cần nó là một tab bình thường thay vì 4 khoảng trống để thụt lề.

Tôi nghĩ rằng thiết lập ở trên trong .vimrc sẽ cung cấp cho tôi điều đó, nhưng không hoạt động với tôi như khi tôi chỉnh sửa Makefile Tôi vẫn nhận được 4 khoảng trống để thụt lề.

Không chắc chắn những gì tôi đang làm sai ở đây?

Câu trả lời:


26

Đây là một phần của tôi .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

Phần nên tự giải thích, nhưng tôi khuyên bạn nên đọc trợ giúp vim trên filetypeautocmd.

Dòng phù hợp nhất với bạn, có lẽ là dòng này:

autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

đảm bảo phát hiện filetype được bật, mặc dù.


Cảm ơn các autocommands tuyệt vời! Tôi nhận thấy trong hướng dẫn này trong khi học từ bạn .vimrcrằng nếu bạn không bọc autocmdcác augroupphần của mình, Vim sẽ đọc chúng trong và sao chép chúng. Điều này có đúng không?
Joshua Detwiler

6

Thay vì thực hiện điều này với autocmds, bạn có thể tạo plugin filetype người dùng của riêng bạn cho từng loại tệp và đặt nó vào ~/.vim/ftplugin/<filetype>.vim, đâu <filetype>là loại tệp thực tế bạn muốn. Ví dụ:

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

Bạn cần đảm bảo rằng bạn đã kích hoạt các plugin filetype trong lệnh của mình ~/.vimrcbằng lệnh sau:

filetype plugin on

Câu trả lời này có ý nghĩa hơn nếu bạn muốn giữ các thư mục .vimrc và .vim của bạn gọn gàng.
Floby

0

Cấu hình vim đơn giản hơn để luôn mở rộng các tab, đó là điều cần thiết cho tất cả các tệp ngoại trừ tệp thực hiện. Trong tệp tạo tệp, bạn có thể sử dụng để chèn một tab bất cứ nơi nào bạn muốn. Nó sẽ không được mở rộng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.