Câu trả lời:
Phương pháp tốt nhất là đặt những cài đặt đó vào ~/.vim/after/ftplugin/<filetype>.vim
.
Đối với HTML (giả sử bạn muốn có các tab rộng 4 ký tự):
~/.vim/after/ftplugin/html.vim
setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab
Sử dụng ftplugin được ưu tiên sử dụng autocommands vì Vim đã tự kiểm tra filetype và đã cố gắng cung cấp ftplugin đầy đủ để không có lý do gì để buộc kiểm tra nhiều hơn và thực hiện lại bánh xe.
-- chỉnh sửa --
Giả sử bạn có filetype plugin on
trong vimrc
- cái mà bạn nên - Vim sẽ cố gắng phát hiện loại tệp của các tệp bạn chỉnh sửa và, sau khi tìm thấy loại tệp chính xác cho bộ đệm, hãy thử tìm nguồn ftplugin tương ứng ở các vị trí chuẩn này:
$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim
Tất cả điều đó xảy ra tự động vì vậy, nếu filetype của bạn được Vim nhận ra, hoàn toàn không có lý do gì để thêm bất kỳ logic phát hiện filetype nào: chỉ cần thêm cài đặt của bạn vào ftplugin phù hợp và bạn vẫn ổn.
filetype plugin indent on
trong của bạn vimrc
.
filetype plugin on
được đặt, đường dẫn của vim bao gồm các tệp ftplugin/<filetype>.vim
và after/ftplugin/<filetype>/vim
tệp trong đường dẫn của nó.
Bạn có thể làm điều này với autocommands trong của bạn .vimrc
.
Ví dụ: tôi có một chức năng html_like_mode
thiết lập nhiều thứ khác nhau để chỉnh sửa các tệp HTML. Trong tôi .vimrc
, tôi có:
au BufNewFile,BufRead *.html call s:html_like_mode()
Đó là phím tắt của phần mở rộng tập tin. Bạn cũng có thể tắt kiểu tệp, nếu bạn đã bật:
au FileType perl setlocal equalprg=perltidy
Như bạn thấy, bạn có thể yêu cầu nó thực hiện bất kỳ lệnh nào ở đó. Vì vậy, bạn có thể dễ dàng thực hiện một setlocal shiftwidth 4
tệp * .c của mình.
augroup
cho phép bạn nhóm các autocommands liên quan thành các nhóm được đặt tên. (Xem tại đây để tìm hiểu về Nhóm Autocommand.) Chúng tôi sử dụng augroup
s để thêm autocommands ~/.vimrc
theo cách không thêm bản sao mỗi lần chúng tôi cung cấp nguồn.
augroup vimrc
autocmd!
augroup END
autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4