2009-10-12 21 views
9

Điều này nghe có vẻ ngớ ngẩn, nhưng tôi không tìm thấy nó trong sự giúp đỡ.VIM đếm/xác định số lỗi trong quickfix

Cách xác định số lỗi trong QuickFix, sau khi chạy :make?

Hoặc ít nhất hãy xem có lỗi nào không, tức là lỗi> 0?

Trả lời

13

Bạn có thể lập trình được danh sách các lỗi với getqflist():

getqflist()      *getqflist()* 
     Returns a list with all the current quickfix errors. Each 
     list item is a dictionary with these entries: 
      bufnr number of buffer that has the file name, use 
       bufname() to get the name 
      lnum line number in the buffer (first line is 1) 
      col column number (first column is 1) 
      vcol non-zero: "col" is visual column 
       zero: "col" is byte index 
      nr error number 
      pattern search pattern used to locate the error 
      text description of the error 
      type type of the error, 'E', '1', etc. 
      valid non-zero: recognized error message 

     When there is no error list or it's empty an empty list is 
     returned. Quickfix list entries with non-existing buffer 
     number are returned with "bufnr" set to zero. 

     Useful application: Find pattern matches in multiple files and 
     do something with them: > 
      :vimgrep /theword/jg *.c 
      :for d in getqflist() 
      : echo bufname(d.bufnr) ':' d.lnum '=' d.text 
      :endfor 

Nếu bạn chỉ muốn tổng số, sử dụng len(getqflist()). ví dụ:

:echo len(getqflist()) 

Nếu bạn chỉ muốn biết một cách tương tác, :cw sẽ mở ra danh sách trong cửa sổ nếu có bất kỳ lỗi (và đóng nó nếu nó đã được mở và không có lỗi). Số lượng các dòng trong bộ đệm đó là số lỗi.

+3

Nếu cửa sổ QuickFix chứa văn bản không được coi là một lỗi, danh sách trả về bởi 'getqflist()' sẽ chứa mục cho mỗi người trong các dòng. Vì vậy, bạn vẫn có thể có lỗi zero với 'len (getqflist())' trả về khác không. Bạn cần phải kiểm tra cờ 'hợp lệ' trong danh sách kết quả. Sử dụng hàm 'filter()' cho điều đó. – Ben

+2

'len (bộ lọc (getqflist(), 'v: val.valid'))' sẽ cung cấp cho bạn số mục nhập nhanh hợp lệ. Trong nhiều trường hợp, nó sẽ bằng số lượng mục nhập, nhưng không phải lúc nào cũng vậy. Tìm kiếm ': help filter()' sẽ là một khởi đầu tốt để tìm ra điều đó. ;-) – Ben

+0

Cảm ơn bạn đã trả lời. Tôi chỉ cần một số hướng dẫn và viết một phiên bản thông thường mà không sử dụng 'filter()', xem [gist của tôi] (https://gist.github.com/ih4cku/fa5d57f9f1dc5c03b6c36155bf3e2904) nếu bạn thấy thú vị. Rõ ràng, bằng cách sử dụng 'filter()' là thanh lịch hơn. @Ben – nn0p

1

Bạn chỉ có thể sử dụng getqflist() chức năng (xem :help getqflist()):

:echo printf("Have %d errors", len(getqflist())) 
Các vấn đề liên quan