2009-10-13 27 views
128

Tại nơi làm việc của tôi, tôi đang yêu cầu phải làm theo phong cách nhà cho indentation, mà đi như sau:Thiết Vim ưu đãi về khoảng trắng bởi filetype

  • 2 không gian khi mã hóa html và ruby ​​
  • tab khi mã hóa javascript, với tabwidth = 4 được đề 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 loại tệp là gì?

+0

thể trùng lặp của [Thay đổi Vim thụt đầu dòng hành vi theo loại file] (http://stackoverflow.com/questions/158968/change-vim-indentation-behavior-by-file-type) – acgtyrant

+0

Tất cả những câu trả lời này chỉ khiến tôi bối rối hơn. Vấn đề là các tùy chọn tùy thuộc vào sở thích. Câu trả lời được chấp nhận có một cú pháp tốt đẹp mặc dù. Đây là một hướng dẫn tuyệt vời: http://vimcasts.org/transcripts/2/en/ – Mikuz

Trả lời

203

có nhiều cách, nhưng đây là cách đơn giản, dễ hiểu. thêm những dòng này vào số ~/.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 
+5

+1 cho: setlocal –

+1

Hoàn hảo, cảm ơn! – nelstrom

+20

ts = 'số lượng chỗ mà trong tập tin sử dụng' 'số lượng chỗ mà sử dụng trong khi chỉnh sửa' sts = sw 'số không gian để sử dụng cho (tự động) bước thụt' = để biết chi tiết xem: http://vimdoc.sourceforge.net/htmldoc/quickref.html#option-list – zdsbs

32

+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 điều gì đó phức tạp hơn một setlocal, giống 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 của vim sẽ được giải cứu.

Bạn cần có filetype plugin on hoặc filetype plugin indent on trong .vimrc và sau đó để tạo plugin cho ví dụ: 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 nào bạn thích ở đây, để chạy khi tệp Ruby được tải, nhưng các tệp được đề xuất bao gồm setlocal, map <buffer>, command -buffer và xác định hàm. Rất nhiều thông tin có trong Hướng dẫn sử dụng; nếu bạn khá quen thuộc với kịch bản lệnh vim, hãy chuyển đến :help 41.11, nếu không hãy đọc :help usr_40:help usr_41.

+1

Cảm ơn, điều đó đã cho tôi rất nhiều thứ để đọc. – nelstrom

72

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

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ể làm cho nhân vật vim chương trình bằng cách sử dụng tab :set list.
  • Khi bạn đã đặt tùy chọn tab/không gian chính xác, bạn có thể sửa vim tệp (thay thế dấu cách bằng tab hoặc ngược lại) bằng cách sử dụng lệnh :retab!.
+2

Lợi ích của 'expandtab' trên' sts = 2' –

+12

@JamesMcMahon expandtab mở rộng tất cả các tab thành không gian. sts (softtabstop) chèn dấu cách và các tab cho thụt lề: 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 dấu cách. http://stackoverflow.com/questions/1562336/tab-vs-space-preferences-in-vim 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 có 2 ký tự rộng, không phải khoảng trắng. – ajmccluskey

9

Ngoài ra còn có tập lệnh vim đẹp: DetectIndent cố gắng phát hiện sự 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 tin với phong cách mã hóa khác nhau.

tôi sử dụng một autocommand trong tôi vimrc:

:autocmd BufReadPost * :DetectIndent 
0

Để chèn các ký tự không gian bất cứ khi nào phím tab được nhấn, thiết lập 'expandtab' tùy chọn:

:set expandtab 

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

:set tabstop=2 

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

Các vấn đề liên quan