Zsh: Tự động sửa đổi lệnh đã thực hiện


9

Gần đây tôi đã cài đặt grc (bộ tạo màu chung) cho hệ thống của mình thông qua MacPorts, cho tôi khả năng nhận đầu ra được tô màu cho nhiều lệnh mà theo mặc định không hỗ trợ nó (xem ảnh chụp màn hình bên dưới). Ví dụ về grc với traceroute.
Tôi muốn sử dụng grc tự động, tuy nhiên không phải cho các lệnh cụ thể, mà cho mọi lệnh. Tôi sử dụng zsh như vỏ của tôi.

Về cơ bản bất cứ khi nào tôi thực thi, command -parameter 1 2 3tôi muốn nó tự động được thực thi như grc command -parameter 1 2 3.
Tôi không muốn sử dụng các bí danh, ví dụ như traceroutebí danh grc traceroute, vì tôi đang thêm ngày càng nhiều lệnh cho grc để tô màu.

Tôi đã xem xét các cấu hình preexec và premd cho .zshrc, nhưng tôi chưa tìm được cách nào để đạt được những gì tôi đang tìm kiếm.

Câu trả lời:


6

Bạn có thể làm điều đó bằng cách xác định lại tiện ích dòng chấp nhận:

add-grc() { [[ $BUFFER = grc* ]] || BUFFER="grc $BUFFER"; zle .$WIDGET "$@"; }
zle -N accept-line add-grc

Tuy nhiên, nó có thể gây ra sự cố cho các lệnh như "for i (..)", "var = x", "f () {" ...


Điểm tốt. Tôi không thể nghĩ ra bất kỳ vấn đề nào mà giải pháp này có thể tự tạo ra, nhưng bạn đúng thay mặt này. Cảm ơn bạn đã dành thời gian.
Nit

Một nhược điểm với phương pháp này là lịch sử sẽ hiển thị grckhi bắt đầu mọi lệnh.
joeytwiddle

6

Thay thế khác. Cùng một loại vấn đề tiềm ẩn:

TRAPDEBUG() { eval "grc $ZSH_DEBUG_CMD"; setopt errexit; }

Tôi sẽ sử dụng một "bí danh" cho mọi lệnh cần "grc" thay vì cố gắng tìm ra ngoại lệ cho các giải pháp được đăng ở đây.


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.