2011-02-01 41 views
11

Tôi đang tìm kiếm $ PWD -name 'filename' | vim -chuyển hướng đầu ra của lệnh 'find' sang 'vim'

mong đợi tên tệp sẽ được mở trong trình chỉnh sửa vim. nhưng nó không hoạt động. Trong trường hợp này, tôi chắc chắn rằng chỉ tồn tại một tệp có tên 'tên tệp'.

Ngoài ra, kết quả tìm thấy cung cấp cho đường dẫn hoàn chỉnh trên thiết bị xuất chuẩn.

+0

bằng cách sử dụng 'lệnh | vim -' yêu cầu vim đọc đầu ra từ 'lệnh' và đặt nó vào bộ đệm. (Trái với việc mở các tệp đó.) – idbrii

+0

@pydave Tôi đã bỏ lỡ dấu '-' trong nhận xét của bạn. Quan trọng! –

+1

@pydave Ngẫu nhiên, 'vim <(command)' làm tương tự, sử dụng quá trình thay thế Bash, và điều này làm việc với nhiều hơn chỉ là vim. ví dụ. để thấy sự khác biệt giữa hai thư mục, sử dụng 'diff <(ls -l dir1) <(ls -l dir2)' –

Trả lời

20
vim "$(find "$PWD" -name 'filename')" 

hoặc

find "$PWD" -name 'filename' -exec vim {} \; 

(Bạn có thể thả "$PWD", bằng cách này. find bắt đầu tìm kiếm từ thư mục hiện hành theo mặc định.)

+0

Cảm ơn bạn Roman .. đã giúp .. –

+1

Điều này không hiệu quả đối với tôi. 'vim '$ (tìm" $ PWD "-name' filename ')" 'mở một tên tập tin whos mới là một kết nối của tất cả các tên tập tin đầu ra từ tìm. Đây là trên OSX. –

+0

Ah. OP chỉ định chỉ có một tệp phù hợp. Do đó, sự phản đối của tôi bị giảm đi. –

7

find . -name 'filename' -print0 | xargs -0 vim

cũng nên làm việc. Bạn có thể muốn đọc trên xargs, đó là một điều tiện dụng để biết.

+1

Điều này không hiệu quả đối với tôi. 'tìm. tên 'tiện ích' -print0 | xargs -0 vim' thay vào đó sẽ mở một tệp mới duy nhất, có tên là một kết nối đầu ra từ tìm. Đây là trên OSX. –

+0

Ah. OP chỉ định chỉ có một tệp phù hợp.Do đó, sự phản đối của tôi bị giảm đi –

0

Được đề cập trong bình luận @ idbrii, nhưng yêu thích của tôi là:

find . -name 'filename' -type f -exec vim {} \+ 

này mở ra mỗi tập tin được tìm thấy trong bộ đệm riêng của mình đã sẵn sàng để được điều hướng với :next:prev. Thử nghiệm trên OSX, nhưng tôi khá chắc chắn nó cũng sẽ hoạt động trên Linux.

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