Ẩn tất cả (không) các dòng phù hợp trong Vim


87

Có thể hiển thị / ẩn tất cả các dòng phù hợp trong vi hoặc Vim không? Không đánh dấu mà chỉ hiển thị những dòng đó.

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

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


Câu trả lời:


109

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

:g/ERROR

và ngược lại:

:g!/Error

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

:v/Error

19
Điều này không tốt lắm. Khi bạn cuộn xuống dưới cùng, lệnh kết thúc và mọi thứ hiển thị trở lại. Nó không thực sự ẩn những nội dung đó.
Kan Li

@KanLi nhấn g<để xem lại hoặc @:nếu bạn không chạy và ra lệnh.
D. Ben Knoble,

53

Một cách tiếp cận khác tùy thuộc vào trường hợp sử dụng của bạn sẽ là sử dụng vimgrep và kết quả của nó là 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 đưa các kết quả vào "danh sách sửa nhanh".

:copensau đó sẽ mở danh sách Quickfix trong một cửa sổ Quickfix 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. Trong cửa sổ Quickfix, sau đó, 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.

:coldersẽ cho phép bạn quay lại danh sách quickfix cũ hơn (kết quả vimgrep cũ hơn). Và :cnewerchuyể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 tiền tố nhanh được gọi là "danh sách vị trí". Để sử dụng nó thay vào đó bạn sử dụng :lvimgrep, sau đó sử dụng lệnh l-tiền tố chứ không phải là lệnh c-tiền tố - :lopen, :lolder, :lnewer.

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

Tái bút, Bạn đã nói rằng bạn không muốn một cách tiếp cận xóa các dòng và sau đó hoàn tác chúng. Nhưng vì bạn đã đánh dấu g/ERRORlà 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à phải làm g!/ERROR/d. Sau đó, bạn có thể dễ dàng hoàn tác bằng cách sử dụng u. Ngoài FYI, bạn có thể làm :set hlsearchđể đánh dấu các mẫu phù hợp với :gcác lệnh.


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

Bạn có thể làm điều này với các đường không khớp với mẫu không?
Jacktose


26

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

:vimgrep /something/g % | copen

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

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


1
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

Bạn có thể làm điều này với các đường không khớp với mẫu không?
Jacktose

1

:vimgrep /something/g % | copenhoạt động tuyệt vời. Cũng :g/<pattern>/dcó thể được sử dụng để xóa các dòng với mẫu


Đây chính xác là một câu trả lời khác cho câu hỏi này.
Shivendra

1

trong trường hợp bạn tình cờ sử dụng, fzfbạn có thể sử dụng:

  • :Lines trong tất cả các tệp đang mở
  • :BLines chỉ trong bộ đệm mở
  • :Rg [pattern] sử dụng ripgrep

1

Một số cách bẩn thỉu để làm điều này:

:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)

0

Có thể ý bạn là lệnh ít vim & / pattern / hiển thị các dòng chứa / pattern / (như grep).

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.