Có chế độ kết hợp mờ tồn tại cho vỏ zsh không?


22

Gần đây tôi đã yêu các hệ thống hoàn thành văn bản hiệu quả. Một trong những loại hoàn thành yêu thích của tôi được gọi là hoàn thành mờ. Đây là chế độ trong đó chương trình sẽ hoàn thành đầu vào của người dùng chỉ dựa trên một vài ký tự có thể xuất hiện 'bất cứ nơi nào' (gần như) trong tên tệp hoặc đường dẫn. Tính năng này tồn tại ít nhất cho các chương trình này:

Ví dụ sử dụng của chế độ này trong trình soạn thảo văn bản:

Người dùng đang cố gắng hoàn thành từ longWordNameThatTheyDontWantToWriteByHand và họ có thể làm như vậy bằng cách nhập ví dụ: chữ cái đầu tiên và một số chữ cái viết hoa. Vì vậy, gõ lwnt có thể hoàn thành toàn bộ từ.

Câu hỏi của tôi là: có một chế độ hoặc một cái gì đó tương tự mà tôi có thể sử dụng với vỏ zsh không?

Câu trả lời:


27

Tôi có cái này trong tôi .zshrc

# 0 -- vanilla completion (abc => abc)
# 1 -- smart case completion (abc => Abc)
# 2 -- word flex completion (abc => A-big-Car)
# 3 -- full flex completion (abc => ABraCadabra)
zstyle ':completion:*' matcher-list '' \
  'm:{a-z\-}={A-Z\_}' \
  'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
  'r:|?=** m:{a-z\-}={A-Z\_}'

Nó thêm kết hợp mờ hoàn toàn vào zshcông cụ hoàn thành. Nó thiếu siêu thông minh của văn bản siêu phàm, nhưng, vâng, nó sẽ hoàn thành lwnt -> longWordNameThatTheyDontWantToWriteByHand.


1
Tôi vừa tìm thấy một lỗi: không hoạt động đối với tên tệp có khoảng trắng, do bạn đang gõ bất cứ thứ gì sau khoảng trắng Tôi stack install && vlc ~/Music/erfkhông hoàn thành stack install && vlc ~/Music/FGFC820\ -\ Perfect\ War.mp3.
Hi-Angel

5
@ Hi-Angel này, cảm ơn vì đã trả tiền này. Tôi thực sự sử dụng 'r:|?=** m:{a-z\-}={A-Z\_}'bây giờ, một bó đơn giản hơn, và không gặp phải vấn đề bạn mô tả.
PythonNut

Thật tuyệt! Có lẽ bạn có thể tạo một plugin với mã này. Chỉ để dễ tìm hơn.
Julien__

15

Kiểm tra fzf dự án của tôi .

Đó là một công cụ tìm mờ mục đích chung được viết bằng Golang có thể được sử dụng với bất kỳ danh sách nào: tệp, quy trình, lịch sử lệnh, nhánh git, v.v.

Đối với zsh, nó cung cấp các ràng buộc chính sau:

  • CTRL-T - Dán (các) đường dẫn tệp đã chọn vào dòng lệnh
  • CTRL-R - Dán lệnh đã chọn từ lịch sử vào dòng lệnh
  • ALT-C - cd vào thư mục đã chọn

và chế độ hoàn thành mờ:

# Files under current directory
# - You can select multiple items with TAB key
vim **<TAB>

# Files under parent directory
vim ../**<TAB>

# Files under parent directory that match `fzf`
vim ../fzf**<TAB>

# Files under your home directory
vim ~/**<TAB>

# Directories under current directory (single-selection)
cd **<TAB>

# Directories under ~/github that match `fzf`
cd ~/github/fzf**<TAB>

# Process IDs. Can select multiple processes with TAB or Shift-TAB
kill -9 <TAB>

# Host names
ssh **<TAB>
telnet **<TAB>

# Environment variables / aliases
unset **<TAB>
export **<TAB>
unalias **<TAB>

4
Làm thế nào tôi có thể làm cho nó hoàn thành tab này theo mặc định? Không cần phải gõ**
theonlygusti
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.