2009-05-14 35 views
66

Có thể hiển thị/ẩn tất cả các dòng khớp trong vi hoặc Vim không? Không làm nổi bật nhưng chỉ hiển thị những dòng đó.Ẩn tất cả các dòng phù hợp (không) trong Vim

Ví dụ: tôi có văn bản có từ là ERROR. Làm thế nào để làm cho nó chỉ hiển thị các dòng có chứa ERROR và cách chỉ hiển thị các dòng không có ERROR?

Có giải pháp mà không xóa tất cả các dòng phù hợp và sau đó chỉ cần hoàn tác?

+0

http://vi.stackexchange.com/q/2280/12111 – graceman9

Trả lời

76

Bạn biết về lệnh :global? Điều này có làm những gì bạn muốn không?

:g/ERROR 

và cho điều ngược lại:

:g!/Error 

hoặc tương đương:

:v/Error 
+14

Điều này không phải là rất tốt. Khi bạn cuộn xuống dưới cùng, khi đó lệnh kết thúc và mọi thứ sẽ hiển thị lại. Nó không thực sự che giấu những nội dung đó. –

34

Bạn có thể sử dụng

:g/ERROR/ 

để in tất cả các dòng với ERROR

Cũng có một plugin Vim mà tôi đã thấy nhiều lần nhưng không sử dụng: foldsearch : fold away lines that don't match a given pattern

+12

+1 cho liên kết đến plugin foldsearch. Nó không phô trương và có thể có ích. – user55400

+0

+1 dành cho plugin foldsearch. Cuộc sống tiết kiệm! –

42

Một cách tiếp cận tùy thuộc vào trường hợp sử dụng của bạn sẽ được sử dụng vimgrep và kết quả của nó trong QuickFix. Bạn có thể làm như sau:

:vimgrep pattern % sẽ tìm kiếm tệp hiện tại và đưa bạn đến kết quả tìm kiếm đầu tiên. Quan trọng hơn nó cũng đặt kết quả trong danh sách "quickfix".

:copen sau đó sẽ mở danh sách quickfix trong cửa sổ nhanh riêng biệt. Vì vậy, bạn sẽ có một cửa sổ riêng biệt với tất cả các dòng từ vimgrep cuối cùng của bạn. Bên trong cửa sổ quickfix, bạn có thể nhấn Enter hoặc nhấp đúp vào một dòng để chuyển đến dòng tương ứng trong tệp gốc của bạn.

:colder sẽ cho phép bạn quay lại danh sách nhanh nhanh hơn (kết quả cũ hơn). Và :cnewer chuyển tiếp đến các kết quả tìm kiếm mới hơn.

Lưu ý rằng danh sách quickfix cũng được cập nhật khi chạy :make (đó là lý do tại sao nó được gọi là quickfix để sửa lỗi). Bởi vì điều này cũng có một thay đổi cho danh sách quickfix được gọi là "danh sách vị trí". Để sử dụng thay vào đó, bạn sử dụng :lvimgrep, sau đó sử dụng các lệnh được đặt trước tiền tố thay vì các lệnh có tiền tố c - :lopen, :lolder, :lnewer.

Có, tất nhiên, bạn có thể làm được nhiều việc hơn. Xem :help quickfix để biết thêm thông tin.

PS, Bạn cho biết bạn không muốn một phương pháp xóa đường và sau đó hoàn tác chúng. Nhưng kể từ khi bạn đánh dấu g/ERROR là câu trả lời tôi nghĩ tôi sẽ chỉ ra một cách nhanh chóng và bẩn thỉu là làm g!/ERROR/d. Sau đó bạn có thể dễ dàng hoàn tác nó bằng cách sử dụng u. Ngoài ra, bạn có thể làm :set hlsearch để làm nổi bật các mẫu khớp với các lệnh :g.

+0

Cảm ơn mẹo về ": g!/ERROR/d" tốt hơn câu trả lời được chấp nhận. – VinGarcia

0

Bạn có thể có nghĩa là lệnh trong ít vi vim &/pattern/ hiển thị các dòng chứa/mẫu/(như grep).

12

Cách tốt nhất để làm điều này là->

:vimgrep /something/g % | copen 

này sẽ mở ra danh sách kết quả cho từ khóa của bạn và cũng sẽ chỉ hiển thị các dòng phù hợp trong cửa sổ QuickFix.

+0

Thay thế% bằng đường dẫn tệp nếu bạn không xem xét tệp hiện tại. – Shivendra

+0

rất hữu ích !!!! cảm ơn bạn!!! – ihightower

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