Làm thế nào để grep trong đầu ra lệnh ex?


10

Làm thế nào để tìm kiếm một mẫu trong đầu ra lệnh ex? Ví dụ, làm thế nào để tìm kiếm một mẫu tên tệp trong đầu ra của :scriptnameslệnh? Trong sự giúp đỡ cho tất cả các hương vị grepvimgrepchỉ có {file}một nơi để thực hiện tìm kiếm.

Câu trả lời:


6

Bạn có thể làm:

:redir => scriptn | sil exe 'scriptnames' | redir end | echo(system('grep pattern',scriptn))

Những gì nó làm :

:redir => scriptn "redirect following output to variable scriptn :sil exe 'scriptnames' "silently execute scriptnames :redir end "end the redirection :echo(system('grep pattern',scriptn)) "echo the call of grep witht that input with the pattern `pattern`


8

Các :filterlệnh là một phương pháp đơn giản, một dòng này.

:filter /indent/ scriptnames

Sẽ chỉ hiển thị các dòng khớp với mẫu indenttừ đầu ra của :scriptnameslệnh.


Tôi thấy :redircác giải pháp được định hướng cho các câu hỏi như thế này thường rất tốt, cung cấp nhiều sức mạnh và tùy chọn, nhưng tôi cảm thấy chúng hơi quá mức khi thường xuyên hơn không, bạn chỉ cần nhanh chóng kiểm tra xem có gì đó không. :filterlà thuận tiện để sử dụng trong thời điểm và chết đơn giản.


1
Điều này là sạch sẽ và súc tích hơn.
jdhao

Thật vậy, đây nên là câu trả lời được chấp nhận. (Đã học được rất nhiều từ câu trả lời của edi9999, do đó, upvote.)
toraritte

3

Trước tiên, bạn cần lấy đầu ra của scriptnamesvà đặt nó vào một bộ đệm.

Bạn có thể sử dụng :redircho điều đó:

:redir @a       " redirect output of following ex commands to register a
:scriptnames    " press G to get to the end of the output if it's too long
:redir END      " end the redirection
:vnew           " new buffer in vertical window
:put a          " put content of register
/pattern        " search for 'pattern'

Điều đó nói rằng, một :scriptnameđầu ra quá dài để được quét bằng mắt của bạn có thể là một triệu chứng của các vấn đề sâu hơn.


Đồng ý với câu cuối cùng của bạn. Nếu đầu ra dài như vậy, việc lọc phải được thực hiện trực tiếp từ dòng lệnh, không phải từ bên trong ex.
tự đại diện

Xin lỗi, đừng xem ý của bạn về danh sách quá dài. Ví dụ: cú pháp có trong danh sách 10 tệp đó, nerdtree 13 tệp khác, v.v.
Al Berger

2
Nếu đầu ra của bạn :scriptnamesdài hơn Magna Carta, bạn có thể cân nhắc cài đặt scriptease của Tim Pope . Nó cung cấp một hàm :Scriptnamesđặt tất cả rác đó vào danh sách quickfix. Ở đó bạn có thể tìm kiếm nó vào nội dung trái tim của bạn, lưu nó vào một tập tin hoặc đi đến các tập lệnh tương ứng.
Sato Katsura

@AlBerger, một danh sách quá dài có nghĩa là quá nhiều plugin và / hoặc plugin quá lớn hoặc được viết kém. 13 tệp cho một plugin là quá nhiều.
romainl

Bạn có gợi ý rằng NERDTreenên đặt tất cả các chức năng của nó trong một tệp duy nhất để giữ đầu ra :scriptnamesngắn không? Điều đó sẽ làm cho nó một plugin bằng văn bản tốt hơn?
Sato Katsura
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.