Làm thế nào để đầu ra chuỗi hoàn thành vào thiết bị xuất chuẩn?


15

Một số gitlệnh có nhiều tùy chọn và thường sẽ hữu ích khi tìm kiếm chúng cho tùy chọn tôi cần - Tôi chỉ tìm kiếm tùy chọn kiểm soát TABđộ rộng trong git-gui, nhưng có khoảng 200 lần hoàn thành git config. Một cách giải quyết rõ ràng là sao chép tất cả các phần hoàn thành vào một trình soạn thảo và tìm kiếm thông qua chúng, nhưng tôi muốn làm

[something] | grep tab

Không có manhoặc infotrang nào compgen, help compgenthậm chí không giải thích các tùy chọn của riêng mình và không có tự động hoàn thành cho compgen(điều đó thật trớ trêu?).

PS: compgen -Akhông hoạt động.

PPS: Đây không phải là câu hỏi về git-gui- Giải pháp cho câu hỏi về chiều rộng của tab là ở nơi khác.

PPPS: Đây không phải là về các lệnh tự động hoàn thành, chỉ các tham số lệnh .


Điều này rất giống với Làm thế nào để dẫn đầu ra của "tab hoàn thành"? , nhưng câu trả lời được chấp nhận ở đó đặc biệt dành cho việc hoàn thành các lệnh, không phải là đối số
Michael Mrozek

Câu trả lời:


10

Bạn có thể sử dụng chức năng sau, sử dụng cùng một cách sudotự động hoàn thành tạo danh sách hoàn thành:

comp() {
    local COMP_LINE="$*"
    local COMP_WORDS=("$@")
    local COMP_CWORD=${#COMP_WORDS[@]}
    ((COMP_CWORD--))
    local COMP_POINT=${#COMP_LINE}
    local COMP_WORDBREAKS='"'"'><=;|&(:"
    # Don't really thing any real autocompletion script will rely on
    # the following 2 vars, but on principle they could ~~~  LOL.
    local COMP_TYPE=9
    local COMP_KEY=9
    _command_offset 0
    echo ${COMPREPLY[@]}
}
comp git config ''

trong đó _command_offsetđược định nghĩa trong bash-hoàn thành (gói).

LƯU Ý: chức năng cần được chạy trong trình bao tương tác (nghĩa là nếu nó nằm trong một tệp, tệp cần phải có nguồn thay vì chỉ chạy.) Hoặc các quy tắc / chức năng hoàn thành cần thiết sẽ không được xác định.

Tái bút compgen -Achỉ hoạt động cho các hành động dựng sẵn, những gì bạn nên thử (nhưng cũng không hoạt động) là compgen -F(hoặc thực tế compgen -o bashdefault -o default -o nospace -F _git). Lý do điều này không hoạt động (và doc cho các lệnh tích hợp bash bao gồm compgen / Complete) có thể được tìm thấy trong bash (1) .


@ l0b0 hy vọng hoạt động trong mọi trường hợp.
yuyichao

Tuyệt vời, nó hoạt động! Tôi đã thực hiện một vài điều chỉnh nhỏ và bây giờ nó đã có trong .bash_aliases của tôi . Bạn có thể muốn cắt tỉa để chỉ còn lại giải pháp, nhưng không nghi ngờ gì bạn nhận được tiền thưởng. Tôi sẽ xóa các bình luận thảo luận của mình vì chúng không còn phù hợp nữa.
l0b0

1
Tôi đã thấy rằng việc sử dụng điều này trong trình bao tương tác có thể phá hủy việc hoàn thành tab đã có. Làm cho mỗi biến cục bộ thành hàm giải quyết vấn đề đó. (ví dụ local COMP_LINE="$*")
AL Flanagan

@ALFlanagan Điểm tốt. Cập nhật.
yuyichao 17/2/2015
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.