Đặt tùy chọn khoảng trắng Vim theo filetype


155

Trong công việc của tôi, tôi được yêu cầu phải theo kiểu nhà để thụt lề, như sau:

  • 2 khoảng trắng khi mã hóa html và ruby
  • các tab khi mã hóa javascript, với độ rộng băng thông = 4 đề xuất

Cách tốt nhất để chỉ định các tùy chọn khoảng trắng khác nhau cho mỗi filetype là gì?



Tất cả những câu trả lời này chỉ khiến tôi thêm bối rối. Vấn đề là các tùy chọn là tùy theo sở thích. Câu trả lời được chấp nhận có một cú pháp tốt mặc dù. Đây là một hướng dẫn tuyệt vời: vimcasts.org/transcripts/2/vi
Mikael Lindlöf 2/2/2016

Câu trả lời:


245

có nhiều cách, nhưng đây là một cách đơn giản, dễ hiểu. thêm những dòng này vào ~/.vimrc:

autocmd FileType html setlocal ts=2 sts=2 sw=2
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
autocmd FileType javascript setlocal ts=4 sts=4 sw=4

27
ts = 'số khoảng trắng mà <Tab> trong tệp sử dụng' sts = 'số khoảng trắng mà <Tab> sử dụng trong khi chỉnh sửa' sw = 'số khoảng trắng để sử dụng cho (tự động) bước thụt lề' để biết chi tiết, hãy xem: vimdoc.sourceforge .net / htmldoc / quickref.html # tùy chọn-danh sách
zdsbs

Tôi cần phải nối thêm exttab ít nhất cho ruby, xem câu trả lời của 'quá nhiều php' tại đây
Michael Durrant

87

Câu trả lời của Peter là đủ đơn giản, nhưng tiếc là các tùy chọn không đúng. Bạn cần sử dụng các tùy chọn sau thay thế:

autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab

Cũng lưu ý:

  • Bạn có thể tạo vim hiển thị các ký tự tab bằng cách sử dụng :set list.
  • Khi bạn có các tùy chọn tab / không gian được đặt chính xác, bạn có thể thực hiện sửa chữa vim tệp (thay thế khoảng trắng bằng các tab hoặc ngược lại) bằng cách sử dụng :retab!lệnh.

2
Lợi ích của expandtabhơnsts=2
James McMahon

12
@JamesMcMahon extendtab mở rộng tất cả các tab sang không gian. sts (softtabstop) chèn khoảng trắng và tab cho thụt lề: càng nhiều tab sẽ phù hợp với thụt lề dựa trên kích thước của tabstop, và sau đó là khoảng trắng sau đó. Tất nhiên, nếu Expandtab được bật, tất cả các tab được chèn sẽ được chuyển đổi thành khoảng trắng. stackoverflow.com/questions/1562336/ trên có thể giúp thêm. Nếu không có tab mở rộng, câu trả lời của Peter sẽ chèn các tab rộng 2 ký tự, không phải khoảng trắng.
ajmccluskey

35

+1 cho câu trả lời của Peter, nhưng Vim cũng cung cấp một giải pháp khác. Nếu bạn muốn làm một cái gì đó phức tạp hơn mộtsetlocal , như thiết lập một loạt các tùy chọn, lệnh và ánh xạ cùng một lúc, thì tính năng plugin filetype của vim sẽ được giải cứu.

Bạn cần phải có filetype plugin onhoặc filetype plugin indent ontrong của bạn .vimrc, và sau đó để tạo một plugin cho ví dụ như ruby ​​bạn có thể tạo ~/.vim/ftplugin/ruby.vim. Về mặt kỹ thuật, bạn có thể sử dụng bất kỳ lệnh bạn thích ở đây, để được chạy khi một tập tin của Ruby được nạp, nhưng những người đề nghị bao gồm setlocal, map <buffer>, command -buffer, và chức năng xác định. Nhiều thông tin hơn có trong Hướng dẫn sử dụng; nếu bạn khá quen thuộc với kịch bản vim thì hãy chuyển sang :help 41.11, nếu không thì đọc :help usr_40:help usr_41.


10

Ngoài ra còn có một tập lệnh vim đẹp: DetectInent cố gắng phát hiện thụt lề của tệp mà bạn mở. Nó rất tiện dụng nếu bạn làm việc với nhiều tệp với phong cách mã hóa khác nhau.

Tôi sử dụng autocommand trong .vimrc của mình :

:autocmd BufReadPost * :DetectIndent 

0

Để chèn ký tự khoảng trắng bất cứ khi nào phím tab được nhấn, hãy đặt tùy chọn 'extendtab':

:set expandtab

Bước tiếp theo là kiểm soát số lượng ký tự khoảng trắng sẽ được chèn khi nhấn phím tab, đặt tùy chọn 'tabstop'. Ví dụ: để chèn 2 khoảng trắng cho một tab, hãy sử dụng:

:set tabstop=2

ref: http://vim.wikia.com/wiki/Converting_tabs_to_spaces

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.