Làm cách nào để thay đổi thụt lề mặc định dựa trên filetype?


34

Tôi muốn có các vết lõm khác nhau dựa trên loại tệp tôi đang làm việc. Ví dụ: làm việc trên một .ctệp tôi muốn thụt lề là 4 khoảng trắng. Trong .htmlcác tệp tôi muốn (phải) làm việc với các tab.

Làm thế nào để tôi đạt được điều đó?

Câu trả lời:


25

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 ontrong 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.


Tôi có cần phải kích hoạt ftplugin bằng cách nào đó hoặc sẽ tạo (các) tệp tự động kích hoạt nó?
DeltaLima

Hãy chắc chắn rằng bạn có filetype plugin indent ontrong của bạn vimrc.
romainl

1
@DeltaLima vim có một đường dẫn mà nó đi qua để kiểm tra cài đặt. Miễn là filetype plugin onđược đặt, đường dẫn của vim bao gồm các tệp ftplugin/<filetype>.vimafter/ftplugin/<filetype>/vimtệp trong đường dẫn của nó.
davidlowryduda

@DeltaLima, vui lòng xem chỉnh sửa của tôi.
romainl

14

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_modethiế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 4tệp * .c của mình.


9

augroupcho 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 augroups để thêm autocommands ~/.vimrctheo 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

2
Sẽ rất hữu ích nếu bạn giải thích điều này làm gì và cách thiết lập nó, không phải ai cũng sẽ biết;)
Seth

3

Đã sử dụng autocmdFileType

autocmd FileType html setlocal shiftwidth=4 tabstop=4
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.