2009-09-10 47 views
14

Công việc hàng ngày của tôi liên quan đến mã hóa với Perl. Ở nhà tôi chơi với Python và Erlang. Đối với Perl tôi muốn thụt lề mã của tôi với hai không gian. Trong khi đó đối với Python chuẩn là 4. Ngoài ra tôi có một số ràng buộc quan trọng để mở khai báo hàm mà tôi muốn sử dụng với tất cả các ngôn ngữ lập trình. Làm thế nào điều này có thể đạt được trong gVim?gVim và nhiều ngôn ngữ lập trình

Như trong, có cách nào để duy trì tệp cấu hình cho từng ngôn ngữ lập trình hay thứ gì đó thuộc loại đó không?

Trả lời

22

Bạn sẽ có thể làm với bằng cách tận dụng các loại file ... ví dụ, thêm video này vào vimrc của bạn (và sửa đổi một cách thích hợp cho các ngôn ngữ khác nhau):

autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab 
+20

Không ghi đè cài đặt mặc định. Sử dụng 'setlocal' (hoặc 'setl') thay vì 'set'. Bạn không muốn cài đặt ngắt autocmd cuối cùng vào các bộ đệm khác. –

+0

@Maxim - Tốt bắt ... :-) –

+2

Lệnh 'set' chấp nhận nhiều tùy chọn. Vì vậy, viết dễ dàng hơn: 'set tabstop = 4 shiftwidth = 4 expandtab' –

23

Trong bạn $ HOME, hãy .vim/thư mục (hoặc vimfiles/trên Windows), trong nó làm cho ftplugin/thư mục, và trong nó giữ cho các tập tin có tên là "perl.vim" hoặc "python.vim" hoặc "html.vim" hoặc ...

Đây phải được tải tự động khi bạn mở/tạo tệp mới của loại tệp đã cho miễn là bạn không quên thêm :filetype plugin on vào trong .vimrc (hoặc _vimrc của bạn dưới cửa sổ)

Sau đó, tùy chọn vim phải được xác định bằng :setlocal (và không phải :set, nếu không định nghĩa của chúng sẽ ghi đè cài đặt chung mặc định).

Các ánh xạ được xác định bằng :n/i/v(nore)map <buffer> cũng như các chữ viết tắt. Các lệnh được xác định với tùy chọn -b. Menu không thể được tạo cục bộ mà không có sự trợ giúp của plugin.

local, <buffer>-b là điều quan trọng để ngăn tác dụng phụ.

+0

Nếu bạn đang ở trên cửa sổ, hãy xem ": help dos-locations". –

+0

+1 Tôi không biết lệnh có thể được xác định cho một bộ đệm duy nhất! –

3

Đây là cách tôi thực hiện. Dưới đây là một đoạn trích từ .vimrc của tôi, và tôi duy trì thêm cấu hình cho mỗi ngôn ngữ và tải chúng khi một bộ đệm mới được tải.

" HTML 
autocmd BufNewFile,BufRead *.html,*.htm,*.xhtml source ~/.vimhtml 
" XML 
autocmd BufNewFile,BufRead *.xml,*.xmi source ~/.vimxml 
" Perl 
autocmd BufNewFile,BufRead *.pl,*.pm source ~/.vimperl 

Lưu ý rằng mặc dù tôi nguồn tệp, tôi có thể thực thi bất kỳ lệnh VIM nào hoặc gọi hàm. ví dụ. để tải một tệp Java mới, tôi làm điều này:

autocmd BufNewFile *.java call GeneratePackage() 

nơi GeneratePackage() là hàm VIM.

+0

autocmd FileType ... là tốt hơn bởi vì bạn tách riêng việc phát hiện loại tệp (với BufNewFile) từ các hành động được thực hiện cho loại tệp đó. – joeforker

7

Ngoài câu trả lời của rangerchris, bạn có thể xem xét sử dụng mô hình. Modelines nói với các biên tập viên làm thế nào để cấu hình riêng của mình:

#!/usr/bin/perl 
# vi: ts=4 sw=4 ht=4 et textwidth=76 : 

use strict; 
use warnings; 

print "hello world\n"; 

Đó modeline nói với vi sử dụng 4 tab nhân vật và autoindents, sử dụng không gian thay vì tab, và rằng nó nên chèn một dòng mới khi con trỏ được đến 76 ký tự.

Bạn có thể kiểm soát cách Vim đọc modelines với hai biến (rất có thể thiết lập trong vimrc của bạn):

set modeline 
set modelines=5 

Biến modeline nói với Vim để tìm modelines nếu nó được thiết lập. Biến số modelines cho Vim biết có bao nhiêu dòng từ trên xuống dưới để quét tìm modeline (trong trường hợp này nó sẽ tìm modeline nếu nó nằm trong năm dòng đầu tiên hoặc cuối cùng của tệp).

Giống như bất kỳ hệ thống nào lấy hướng dẫn từ các nguồn không tin cậy, mô hình có thể là security threat, vì vậy người dùng root không bao giờ nên sử dụng modelines và bạn nên giữ bản sao Vim cập nhật.

Lợi ích thực sự đối với các mô hình là chúng theo mỗi tệp. Hầu hết mọi người Perl đều có bốn khoảng trống là người thụt lề, nhưng tôi là một người có tám ký tự. Khi làm việc với mã của người khác, tôi sử dụng một mô hình phản ánh cách sử dụng của họ. Phần còn lại của thời gian tôi sử dụng của riêng tôi.

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