2009-02-23 23 views
13

Tôi đã tự hỏi nếu có một cách để có được vim để đọc .gitignore tập tin và sử dụng chúng để xác định các tùy chọn không có mặt khi tự động hoàn thành tên tập tin.Tôi có thể làm cho vim tôn trọng các tệp .gitignore của tôi không?

Ví dụ: làm việc trong python, tôi không muốn xem tệp .pyc được cung cấp để chỉnh sửa. Tôi nghĩ rằng vim có cơ chế riêng của mình cho điều này, tôi đã tự hỏi làm thế nào để tải thông tin từ .gitignore vào nó.

Trả lời

21

Theo đề nghị của @dwc, đây là một kịch bản vim:

let filename = '.gitignore' 
if filereadable(filename) 
    let igstring = '' 
    for oline in readfile(filename) 
     let line = substitute(oline, '\s|\n|\r', '', "g") 
     if line =~ '^#' | con | endif 
     if line == '' | con | endif 
     if line =~ '^!' | con | endif 
     if line =~ '/$' | let igstring .= "," . line . "*" | con | endif 
     let igstring .= "," . line 
    endfor 
    let execstring = "set wildignore=".substitute(igstring, '^,', '', "g") 
    execute execstring 
endif 

Hãy nguồn đó và đặt nó trong một tập tin trong thư mục plugin của bạn, chẳng hạn như ~/.vim/plugin/gitignore.vim. Nó sẽ đọc tệp .gitignore của bạn và phân tích cú pháp, chuyển định dạng của nó thành một tệp phù hợp cho wildignore và sau đó đặt tùy chọn đó.

Hạn chế:

  • này sẽ đọc các tập tin .gitignore từ thư mục nơi bạn khởi động vim. Không có nỗ lực nào được thực hiện để tìm kiếm các tệp .gitignore khác và phân tích chúng. Ngoài ra, bạn có thể chỉ định đường dẫn tuyệt đối cho tệp trên dòng đầu tiên.
  • Tùy chọn wildignore trong vim không hỗ trợ khái niệm phủ nhận bỏ qua như bạn có thể trong tệp .gitignore. Tức là, bạn không thể nói :set wildignore=*.html,!foo.html để bỏ qua tất cả các tệp html trừ foo.html. Do đó, .gitignore dòng bắt đầu bằng! chỉ đơn giản là bị bỏ qua.
+0

FYI, đây là mã tại vim.org: http: //www.vim.org/scripts/script.php? script_id = 2557 – Florian

+4

Thay đổi 'set wildignore =' thành 'đặt wildignore + ='. Bằng cách đó, các cài đặt bỏ qua trước đây của bạn sẽ không bị ghi đè. – silvenon

+0

Làm thế nào để bạn thực hiện công việc này cho đường dẫn gốc? ("/ blah") – silvenon

18

Vim sẽ bỏ qua mô hình tập tin chỉ định trong tùy chọn wildignore, vì vậy bạn có thể thiết lập chúng như vậy:

:set wildignore=*.o,*~,*.pyc 

Hoặc đặt cùng một dòng (không có ":") trong ~/file vimrc của bạn. Nếu bạn cần một cái gì đó năng động hơn như điều chỉnh để .gitignore trong thư mục hiện tại thì bạn sẽ cần phải làm một số kịch bản, nhưng tôi sẽ để lại đó như là một bài tập cho người khác.

+2

Câu trả lời hay. Lưu ý: Bạn không thể có khoảng trắng giữa \ *. O \ * ~ và \ *. Pyc, vì vậy nó phải là: ': set wildignore = *. O, * ~, *. Pyc'. Chúc mừng –

2

tôi đã viết một plugin cho việc này: https://github.com/octref/RootIgnore

Nó có thể thêm .gitignore mẫu để wildignore của bạn tự động.
Một số tính năng tiện dụng:

  • Khi bạn đang ở trong một thư mục phụ, như thế này:
my_proj/ 
    .gitignore 
    .git/ 
    sub/ 

Nếu bạn cd vào tiểu, và mở Vim đó, các plugin đi đệ quy lên để tìm số .gitignore và thêm nó vào wildignore.

  • Bạn có thể dễ dàng thêm ~/.gitignore quy tắc theo let g:RootIgnoreUseHome = 1.
Các vấn đề liên quan