Lịch sử mỗi thư mục trong zsh


10

Bây giờ tôi rất vui khi sử dụng zshvà tôi khá hài lòng với cài đặt lịch sử của mình, đó là:

# Write to history immediately
setopt inc_append_history
# History shared among terminals
setopt share_history
# Save extended info in history
setopt extended_history
# Ignore duplicates
setopt hist_ignoredups

Nhưng điều thường xảy ra là tôi cần sử dụng các lệnh cụ thể bên trong một số thư mục cụ thể. Ví dụ, khi tôi ở trong ~/my_projecttôi thường gọi make target1 && ./run1, nhưng khi tôi ở trong ~/second_projecttôi thường cần make target2 && cat foobar | ./run2.

Đó là: các thư mục khác nhau, nhưng các lệnh tương tự.

Vì vậy, tôi thường cd ~/my_projectvà gõ makevà sau đó tìm kiếm ngược trong lịch sử cho đến khi tôi tìm thấy những gì tôi cần. Nhưng nếu nó xảy ra mà tôi đã làm việc second_project, khi tìm kiếm lịch sử tôi sẽ tìm thấy một số lệnh mà tôi không cần.

Vì vậy, câu hỏi của tôi: một plugin / thiết lập / cái gì đó tồn tại cho zsh sao cho khi tìm kiếm trong lịch sử, các lệnh được gọi trong thư mục hiện tại được hiển thị đầu tiên?

Lý tưởng nhất là mọi lệnh lịch sử phù hợp khác sẽ xuất hiện sau các lệnh đó, tùy chọn chỉ định số lượng phần tử ưu tiên tối đa.

Tôi sẽ cố gắng tự viết một cái gì đó như thế này, nhưng tôi vẫn không biết cách viết các plugin zsh tùy chỉnh, cách xử lý lịch sử, v.v.

Câu trả lời:


6

Có một plugin tuyên bố sẽ thực hiện chính xác những gì bạn đang tìm kiếm, được đặt tên thích hợp cho mỗi plugin lịch sử thư mục :

https://github.com/jimhester/oh-my-zsh/commit/baa187e4b903f39422a84b580e6e617ec3738e09

"Per-thư mục-history - theo dõi lịch sử lệnh trước đó trên cả thư mục hiện tại và trên toàn cầu, với khả năng chuyển đổi giữa chúng khi đang di chuyển, bị ràng buộc với ctrl-g." wiki của họ nói.

Tôi đã không tự kiểm tra (nhưng), nhưng theo các bình luận thì nó sẽ hoạt động.


1
Rất vui, cảm ơn! Tôi sẽ thử nó trước khi chấp nhận, nếu bạn không phiền :)
AkiRoss

1
Cho đến khi tôi bỏ lỡ điều gì đó, plugin không chính xác những gì tôi cần, theo nghĩa là mỗi thư mục và lịch sử toàn cầu được chuyển đổi lẫn nhau bằng cách sử dụng ctrl-g(chứ không phải theo mức độ ưu tiên như tôi đã hỏi). Tuy nhiên, tôi vẫn thấy nó cực kỳ hữu ích và là một câu trả lời tốt cho câu hỏi của tôi, vì vậy, cảm ơn :)
AkiRoss

Có lẽ do thay đổi trong ZSH, nhưng plugin này trong phiên bản hiện tại dường như không xử lý chính xác lịch sử của ZSH.
Owen

0

Tôi vừa viết một plugin nhỏ thực hiện phần lớn những gì plugin của Jim Hester làm, nhưng sử dụng một cách tiếp cận khác để khắc phục nhiều vấn đề được liệt kê trong repo GitHub của plugin đó:

https://github.com/ericfreese/zsh-cwd-history

Nó lưu trữ một thư mục riêng HISTFILEcho mỗi thư mục bạn đã thực hiện các lệnh và thêm một chpwdhook để chuyển giữa HISTFILEcác thư mục khi bạn thay đổi thư mục.

Nó cũng cung cấp một tiện ích zle mà bạn có thể liên kết với một phím bấm sẽ chuyển đổi HISTFILEgiữa "toàn cầu" ban đầu HISTFILEHISTFILEthư mục làm việc hiện tại của bạn.

Vì vậy, câu hỏi của tôi: một plugin / thiết lập / cái gì đó tồn tại cho zsh sao cho khi tìm kiếm trong lịch sử, các lệnh được gọi trong thư mục hiện tại được hiển thị đầu tiên?

Plugin zsh-cwd-history hiện không hỗ trợ điều này, nhưng tôi hy vọng sẽ sớm hỗ trợ cho nó.


0

Tôi đã có cùng một vấn đề và đã viết một plugin ZSH để giải quyết nó: https://github.com/tymm/zsh-directory-history

Bạn không phải chuyển đổi thủ công giữa lịch sử toàn cầu và thư mục khi sử dụng plugin của tôi.

Lý tưởng nhất là mọi lệnh lịch sử phù hợp khác sẽ xuất hiện sau các lệnh đó, tùy chọn chỉ định số lượng phần tử ưu tiên tối đa.

Điều này cũng hoạt động ra khỏi hộp với plugin của tôi.

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.