zsh 쉘에 대한 퍼지 일치 모드가 있습니까?


22

최근에 효율적인 텍스트 완성 시스템에 빠져 들었습니다. 내가 좋아하는 완성 유형 중 하나는 소위 퍼지 완성입니다. 이것은 프로그램이 파일 이름 또는 경로에서 '거의'어디에서나 발생할 수있는 두 문자 만 기반으로 사용자 입력을 완료하는 모드입니다. 이 기능은 최소한 다음 프로그램에 존재합니다.

텍스트 편집기에서이 모드의 사용 예 :

사용자는 longWordNameThatTheyDontWantToWriteByHand라는 단어를 완성하려고하는데, 예를 들어 첫 글자와 대문자를 입력하면됩니다. lwnt를 입력 하면 전체 단어를 완성 할 수 있습니다.

내 질문은 : zsh 셸과 함께 사용할 수있는 모드 또는 비슷한 것이 있습니까?

답변:


27

나는 이것을 내 .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\_}'

zsh의 완성 엔진에 전체 퍼지 매칭을 추가합니다 . 숭고한 텍스트의 장점은 없지만, 그렇습니다 lwnt -> longWordNameThatTheyDontWantToWriteByHand.


1
방금 버그를 발견했습니다. 공백이 없으면 파일 이름을 입력하면 공백이있는 파일 이름에서 작동 stack install && vlc ~/Music/erf하지 않습니다 stack install && vlc ~/Music/FGFC820\ -\ Perfect\ War.mp3.
Hi-Angel

5
@ Hi-Angel 안녕하세요,이 문제를 해결해 주셔서 감사합니다. 나는 실제로 'r:|?=** m:{a-z\-}={A-Z\_}'지금 사용하는데 , 이것은 훨씬 간단하고 설명하는 문제로 고통받지 않습니다.
PythonNut

대단해! 이 코드로 플러그인을 만들 수도 있습니다. 쉽게 찾을 수 있도록.
Julien__

15

내 프로젝트 fzf를 확인하십시오 .

Golang으로 작성된 범용 퍼지 파인더로 파일, 프로세스, 명령 기록, 자식 분기 등 모든 항목과 함께 사용할 수 있습니다.

zsh의 경우 다음 키 바인딩을 제공합니다.

  • CTRL-T -선택한 파일 경로를 명령 줄에 붙여 넣기
  • CTRL-R -히스토리에서 선택된 명령을 명령 행에 붙여 넣기
  • ALT-C -선택한 디렉토리로 cd

퍼지 완료 모드 :

# 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
기본적으로 탭을 완성하려면 어떻게해야합니까? 타이핑 할 필요없이**
theonlygusti
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.