Cho kết quả của grep -n, làm cách nào tôi có thể mở vim trong dòng cụ thể đó? (chỉ sử dụng bàn phím)


9

Khi tôi chạy grep "keyword" -nvà nhận danh sách kết quả sau:

a/b/c:10:    keyword
a/b/c:70:    keyword
a/b/d:50:    keyword

Làm cách nào tôi có thể mở một trong các tệp (nói thứ 2 trong danh sách) trong dòng tìm thấy?

Bây giờ tôi chỉ sao chép đầu ra bằng chuột và sao chép nó sau vimđó thêm +số dòng tôi sao chép. (có nghĩa là tôi viết vim a/b/c +70bằng cách sử dụng bản sao chuột để lấy tên tệp và một bản sao chuột khác để lấy số dòng [hoặc tôi chỉ sao chép bằng tay, khi nó đủ ngắn])

Có cách nào để làm điều đó với một phím tắt?


Bạn có thể thử một cái gì đó như thế : echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset.
Arkadiusz Drabchot

2
Ngoài ra, nếu bạn quan tâm đến việc sử dụng Vim hiệu quả hơn, hãy kiểm tra trang web Vi và Vim Stack Exchange chuyên dụng .
muru

Câu trả lời:


14

Hai điều:

  1. Vim có một số hỗ trợ cho grep.

    Nếu bạn mở Vim và thực hiện :grep keyword ..., Vim sẽ điền vào danh sách quickfix với kết quả và nhảy đến tệp đầu tiên. Sau đó, bạn có thể chuyển đến mục quickfix thứ n bằng :cc n(và các lệnh khác).

  2. Bạn có thể điền danh sách quickfix đã nói ở trên bằng đầu ra của grep:

    vim -q <(grep -n keyword ...)
    

    Và sau đó sử dụng các lệnh điều hướng quickfix được đề cập ở trên.

Hoặc đơn giản hơn là chơi xung quanh với đầu ra của grep bằng tay.

Thay thế cho (2), bạn có thể lưu đầu ra của grep vào một tệp và thay vào đó sử dụng tệp đó, nếu bạn nghĩ rằng bạn không nhất thiết phải mở Vim sau:

grep ... | tee log
vim -q log

Cố gắng sử dụng cùng một phương pháp trên trạng thái git, nhưng không có kết quả :( - vim -q <(git status | grep đã sửa đổi)
CIsForCookies

3
@CIsForCookies Điều đó sẽ không có cùng định dạng với grep -n( <filename>:<line>: ...). Tôi sử dụng plugin chạy trốn cho Git, và sau đó là vấn đề :Gstatus, di chuyển đến tệp mong muốn và nhấn Enter.
muru

BTW, tôi đã chỉnh sửa ~ / .bashrc của grep alias mình để luôn luôn sử dụng màu sắc và vì lý do nào đó đã phá vỡ -q >()tùy chọn ...
CIsForCookies

2

Bạn có thể thực hiện là như vậy nếu chưa có hỗ trợ cho grep như @muru đã trả lời:

:cexpr system("grep -n keyword")

Nó có thể được sử dụng với một lệnh khác, git grepví dụ.

Ngoài ra, bạn có thể mở đầu ra trong bộ đệm và sử dụng "cbuffer" trên nó.

Xem phần quickfix từ hướng dẫn về nó.

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.