2010-11-09 45 views
14

Tôi đang sử dụng FuzzyFinder và đã tự hỏi làm thế nào tôi có thể hướng dẫn FuzzyFinder loại trừ các tập tin mà nó tìm kiếm. Bây giờ tôi đã sửa đổi mã plugin nhưng phải có một cách dễ dàng hơn.Có cách nào dễ dàng để loại trừ các tệp mà FuzzyFinder tìm kiếm không?

Tôi muốn loại trừ các tệp .class khỏi popping up trong kết quả. Bất kỳ gợi ý/mẹo nào về cách tôi có thể hướng dẫn FuzzyFinder bỏ qua những tệp này?

Trả lời

20
let g:fuf_file_exclude = '\v\~$|\.o$|\.exe$|\.bak$|\.swp$|\.class$' 

Sử dụng :help fuf-options để biết thêm chi tiết.

+0

Cảm ơn bạn đã trả lời, tôi vẫn học theo cách của tôi xung quanh vim và plugins của nó. – Marco

+0

Khi bạn triển khai một plugin, cũng triển khai tài liệu và chạy ': helptags/path/to/the/doc/folder', gần như tất cả các plugin tốt đều có tài liệu phong nha ở đây! – Benoit

+5

Nhớ '\ v' khi bắt đầu nếu bạn muốn biểu thức chính quy! Cũng sử dụng 'g: fuf_coveragefile_exclude' nếu bạn đang sử dụng' FufCoverageFile'. – robbrit

5

Với sự giúp đỡ của Benoit:

"FuzzyFinder should ignore all files in .gitignore 
let ignorefile = ".gitignore" 
if filereadable(ignorefile) 

    let ignore = '\v\~$' 
    for line in readfile(ignorefile) 
    let line = substitute(line, '\.', '\\.', 'g') 
    let line = substitute(line, '\*', '.*', 'g') 
    let ignore .= '|^' . line 
    endfor 

    let g:fuf_coveragefile_exclude = ignore 
endif 

Và vào ngày thứ tám Thiên Chúa bị đánh thức bởi một tiếng động khủng khiếp, và ông đã tạo ra một kịch bản để xác định vị trí các đối tượng rối loạn của mình. Sau đó, tìm ra lỗi, anh ta đã làm họ thất vọng. Và nó tốt hơn một lần nữa.

+2

Điều này chắc chắn hoạt động từ '.vimrc' của bạn nếu bạn nguồn .vimrc của bạn sau khi thiết lập' lcd' (thư mục hiện tại cục bộ), nhưng nếu bạn chuyển tab hoặc cửa sổ sang một dự án khác với 'lcd' khác, bạn phải nguồn '.vimrc' của bạn và nó biến nó thành biến toàn cầu. Có cách nào để làm điều này cho mỗi cửa sổ với 'lcd's khác nhau? – Neil

+0

Đảm bảo đặt 'g: fuf_file_exclude' và' g: fuf_dir_exclude' thành biến 'ignore'. Điều này sẽ làm cho 'FufFile' và' FufDir' hoạt động như mong đợi. – Neil

+0

Cảm ơn. Một bugfix - nên bỏ qua các dòng trống – ygrek

1

Đây là giải pháp tự động nhất sẽ hoạt động trong các cửa sổ và tab khác nhau có lcd riêng của chúng (thư mục hiện tại cục bộ).

Vì Vimrc không có khái niệm thiết lập biến loại trừ mỗi cửa sổ hoặc mỗi tab, bạn phải đặt lại các biến loại trừ mỗi lần chạy FufFile hoặc các hàm liên quan.

Đặt này trong .vimrc của bạn:

" FuzzyFinder 
" ----------------------------------------------------------------------------- 
function! FufSetIgnore() 

    let ignorefiles = [ $HOME . "/.gitignore", ".gitignore" ] 
    let exclude_vcs = '\.(hg|git|bzr|svn|cvs)' 
    let ignore = '\v\~$' 

    for ignorefile in ignorefiles 

     if filereadable(ignorefile) 
      for line in readfile(ignorefile) 
       if match(line, '^\s*$') == -1 && match(line, '^#') == -1 
        let line = substitute(line, '^/', '', '') 
        let line = substitute(line, '\.', '\\.', 'g') 
        let line = substitute(line, '\*', '.*', 'g') 
        let ignore .= '|^' . line 
       endif 
      endfor 
     endif 

     let ignore .= '|^' . exclude_vcs 
     let g:fuf_coveragefile_exclude = ignore 
     let g:fuf_file_exclude = ignore 
     let g:fuf_dir_exclude = ignore 

    endfor 
endfunction 

# Bonus: My custom key mappings for FuzzyFinder 
# Calls the function to set the exclude variables, then runs FuzzyFinder 
nn <Tab> :call FufSetIgnore() <BAR> :FufFile<CR> 
nn <S-Tab> :call FufSetIgnore() <BAR> :FufFile **/<CR> 
nn <F3> :call FufSetIgnore() <BAR> :FufFile **/<CR> 
+0

Điều này thực sự tuyệt vời, nhưng vì một lý do nào đó, nó dường như không thực sự hoạt động lần đầu tiên tôi gọi FF. Tôi có một cây tập tin rất lớn (và tôi không cần lập chỉ mục các phụ thuộc), và mỗi lần tải đầu tiên mất gần một phút. Có cách nào để có được điều này trước khi tìm kiếm mờ tìm cách xây dựng một chỉ mục ở tất cả? – counterbeing

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