2012-01-17 26 views
33

Thỉnh thoảng tôi viết tập lệnh mà không có bất kỳ đuôi tệp nào. Ví dụ:Làm thế nào để Vim phát hiện loại tập tin từ dòng shebang?

#!/usr/bin/env node 

console.log('hello world!'); 

Tôi hy vọng rằng Vim có thể phát hiện filetype từ dòng công việc (ví dụ #!/usr/bin/env nodejavascript). Tôi nên đưa gì vào filetype.vim?

+6

Tại sao không thêm mô hình dòng thứ hai hoặc dòng cuối '# vim: ft = javascript' vì Vim đã kiểm tra mô hình thay vì phát minh lại bánh xe? –

+13

@SwaroopCH Tại sao không phân tích thông tin từ một dòng đã có trong tệp có thông tin cần thiết, giống như bất kỳ [trình chỉnh sửa thực] nào (http://www.gnu.org/software/emacs/) đã thực hiện trong nhiều năm, thay vì lặp đi lặp lại nó một cách dư thừa trong một thời trang cụ thể của trình soạn thảo mà làm hỏng tệp cho người dùng của những người chỉnh sửa khác? */Tôi dons ngọn lửa phù hợp với * –

Trả lời

27

Tiếp theo các hướng dẫn được liệt kê trong :help new-filetype-scripts, tạo file scripts.vim trong thư mục người dùng runtime (~/.vim trên các hệ thống Unix -loại tương tự), và viết kịch bản sau đây trong nó.

if did_filetype() 
    finish 
endif 
if getline(1) =~# '^#!.*/bin/env\s\+node\>' 
    setfiletype javascript 
endif 
+3

Xem thêm toàn bộ ': giúp new-filetype' phần đó là giá trị đọc. –

+0

tại sao các dấu gạch chéo chuyển tiếp không được thoát? /bin/env –

+1

@ LaiYu-Hsuan: Ký tự gạch chéo phía trước không phải là ký hiệu đặc biệt theo cú pháp của cụm từ thông dụng Vim. Nó có thể được thoát như '\ /', tất nhiên, nhưng nó chỉ cần thiết cho các mẫu được sử dụng trong lệnh tìm kiếm chuyển tiếp ('/') hoặc trong lệnh thay thế (': s') khi dấu phân cách mẫu bị gạch chéo. –

10

tạo tập tin này ~/.vim/ftdetect/node.vim với nội dung này

fun! s:DetectNode() 
    if getline(1) == '#!/usr/bin/env node' 
     set ft=javascript 
    endif 
endfun 

autocmd BufNewFile,BufRead * call s:DetectNode() 
+5

thực sự, "ft = javascript" có nhiều khả năng hoạt động. Hầu hết mọi người DO có "javascript" được định nghĩa và KHÔNG có nút "" được xác định. –

0

Một chút muộn để đảng, nhưng Node.vim xử lý phát hiện các file JavaScript ví dụ cho bạn. Và sau đó, vài. :-)

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