Shell이 ​​탭 접두어를 완성할 수 있나요?

Shell이 ​​탭 접두어를 완성할 수 있나요?

커서가 단어의 시작 부분에 있을 때와 단어 끝에 있을 때 탭 완성이 다르게 동작하도록 하고 싶습니다.

나는 다음과 같은 탭 완성 접미사가 있는 쉘만 본 적이 있습니다.

$ tiff2␣
tiff2bw    tiff2pdf   tiff2ps    tiff2rgba

그러나 때로는 캐럿이 단어의 시작 부분에 있을 때 탭으로 접두사를 완성하고 싶을 때도 있습니다. 즉, 2tiff 커서가 단어의 시작 부분에 있는 경우 다음과 같이 로 끝나는 모든 명령으로 확장하고 싶습니다 2tiff.

$ ␣2tiff
raw2tiff gif2tiff bmp2tiff ppm2tiff pnmtotiff ras2tiff e2mtiff fax2tiff

물고기어떤 경우에는 다음을 수행하십시오.

~> ␣2tiff
bmp2tiff  (Executable, 17kB)  ppm2tiff  (Executable, 14kB)
fax2tiff  (Executable, 18kB)  ras2tiff  (Executable, 14kB)
gif2tiff  (Executable, 18kB)  raw2tiff  (Executable, 17kB)

이는 또한 커서를 단어 끝으로 이동하는 부작용이 있으며 유효한 접미사 없이 완료되는 경우에만 작동합니다.

~> ␣tiff
tiff2bw                    (Convert a color TIFF image to greyscale)
tiff2pdf                    (Convert a TIFF image to a PDF document)
tiff2ps                                    (Convert a TIFF image to)
tiff2rgba                 (Convert a TIFF image to RGBA color space)
…and 10 more rows

bashzsh 두 경우 모두 접두사 탭 완성을 만들거나 수행하는 방법을 찾을 수 없습니다 .

답변1

지쉬"새 완성 시스템"을 활성화하고 활성화한 경우complete_in_word옵션.

autoload -U compinit; compinit
setopt complete_in_word

그런 다음 단어의 아무 곳이나(시작 포함) 누르면 Tab단어 중간(또는 커서가 단어의 시작 부분에 있는 경우 시작 부분)에 대한 완성 제안이 표시됩니다. (좀 더 이국적인 설정에서는 완성 기능이 단어의 다른 곳에 내용을 삽입할 수도 있습니다.)

zsh의 또 다른 옵션은 와일드카드 완성을 활성화하는 것입니다.setopt glob_complete. 예를 들어, 단어의 시작 부분을 완성하려면 (단어 끝에 커서를 위치) 입력 *2tiff하고 누르세요 .Tab

Tab기본 구성에서는 시작하기 위해 명령줄을 누르면 완료하는 대신 탭이 삽입된다는 제한이 있습니다 . 한계가 있는 것 같아요expand-or-complete;바인딩 Tab하는 경우menu-complete또는complete-word그런 다음 명령줄 시작 부분에서도 수행됩니다. 를 사용하면 expand-or-complete실제로 단어의 시작 부분에서 끝낼 수 있습니다. 단, 단어가 in =2tiff또는 와 같이 명령줄에서 비어 있지 않은 첫 번째 항목이 아닌 경우에 한합니다 ;2tiff.

관련 정보