TAB
bash 자동완성이 oh-my-zsh처럼 작동하길 원합니다 .
대소문자를 무시하고 각 탭에서 모두 반복할 수 있는 기능을 추가했습니다.
이제 이름이 지정된 디렉토리에 폴더가 있고 이를 LinuxCommands
작성하면 Comm+TAB
폴더와 일치하지 않습니다 LinuxCommands
.
filename contains keywords
" "의 현재 동작 대신 " "를 기반으로 filename starts with keywords
입력된 키워드와 폴더 및 파일 이름 과 일치하도록 bash의 동작을 변경하는 방법이 있습니까 ?
나는 이것이 모두 bash이기 때문에 중요하지 않다고 생각합니다. 하지만 혹시 모르니 MacOS Sierra를 사용하고 있습니다.
업데이트 1
현재 내 코드에 이 ~/.bashrc
수정 사항이 있습니다.
_cd_completion() {
mapfile -t COMPREPLY < <(ls -d */ | grep "${COMP_WORDS[COMP_CWORD]}")
}
complete -F _cd_completion cd
# If ~./inputrc doesn't exist yet, first include the original /etc/inputrc so we don't override it
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
# Add option to ~/.inputrc to enable case-insensitive tab completion
bind 'set completion-ignore-case On'
bind 'set show-all-if-ambiguous on'
bind 'TAB:menu-complete'
혼자서 일을 끝내는 거죠. 하지만 전반적인 성능은 이상합니다. 자동 완성된 다음 자동 완성 후 디렉터리보다 한 수준 아래에 있는 동일한 폴더의 내용을 반복합니다.
예: Folder1, Something2 및 NewFolder3이 있는 경우 을 누르면 cd F+TAB
이 표시되고 > cd Folder1/
, 다시 누르면 TAB
이 표시되고 > cd Folder1/Something2
, 다음에 표시되면 > cd Folder1/NewFolder3
이렇게 상위 폴더를 계속 반복합니다.
답변1
~/.bashrc
파일에 다음 코드를 추가하여 고유한 bash_completion 규칙을 추가할 수 있습니다.
_cd_completion() {
mapfile -t COMPREPLY < <(ls -d */ | grep "${COMP_WORDS[COMP_CWORD]}")
}
complete -F _cd_completion cd
다음으로 터미널을 다시 시작하거나 다음 명령을 입력해야 합니다.source ~/.bashrc
시스템 전체에서 사용할 수 있도록 하려면 /usr/share/bash-completion/completions/cd 파일 내의 bash_completion에 규칙을 추가할 수도 있습니다.
답변2
TAB: menu-complete
제 경우에는 도움말이 광산에서 주석 처리되었으므로 ~/.inputrc
이제 다음과 같습니다.
"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
set match-hidden-files off
set page-completions off
set completion-query-items 350
set completion-ignore-case on
set colored-stats on
set show-all-if-ambiguous off
set enable-bracketed-paste on
set history-size -1
set menu-complete-display-prefix on
#set bell-style none
#TAB: menu-complete