vim
Bash에서는 두 디렉터리보다 깊은 경로가 포함된 명령을 실행할 때 최근 경로 자동 완성 기능이 작동을 멈췄습니다( ls
및 같은 다른 명령의 경우 예상대로 계속 작동했습니다 cd
).
예를 들어, 입력 ls .config/btsync/bt
한 다음 TAB을 누르면 ls .config/btsync/btsync.conf
.
입력한 vim .config/bt
다음 TAB을 누르면 vim .config/btsync/
.
그러나 입력 한 다음 TAB을 누르면 아무 일도 일어나지 않습니다. ( 위의 예 처럼 vim .config/btsync/bt
으로 확장하고 싶습니다 .vim .config/btsync/btsync.conf
ls
내 사용자로 실행할 때와 su로 실행할 때 동일한 문제가 있습니다.
나는 읽었다이 게시물이전 버전의 bash-completion 관련 문제가 언급되어 있지만 2.1-5를 실행하고 있습니다.
업데이트: 몇 가지 추가 테스트를 거친 후 근본 문제는 bash가오직파일 이름이 아닌 전체 디렉터리 이름입니다.
bash-completion
업데이트: 이것이 전반적인 이유인 것으로 밝혀졌습니다 . 허용되는 답변에 대한 두 번째 의견을 참조하십시오.
이 동작의 잠재적 원인에 대한 제안을 주시면 감사하겠습니다!
답변1
나는 당신을 위해 좀 더 조사한 결과 이것이 내가 찾은 것입니다. 자동 완성의 핵심은 bash
명령 입니다 complete
. 사용 규칙을 인쇄할 수 있습니다 vim
.
complete -p vim
다시 말하지만, 다음을 통해 이러한 특정 규칙을 제거할 수 있습니다.
complete -r vim
이 명령은 이를 기본값(추가 논리 없이 일반적인 경로 및 파일 이름 완성)으로 재설정합니다. 이것이 당신이 원하는 것일 수도 있습니다.
자세한 내용은 명령에 대한 섹션을 확인 help complete
하거나 찾아보십시오 (bash 내장 기능이므로 bash 맨페이지에 문서화되어 있습니다).man bash
complete
bash
마지막 참고 사항 - 로그인할 때마다 vim 규칙을 제거하려는 경우 위 변경 사항은 현재 세션에만 영향을 complete -r vim
미치며 ~/.bashrc
.
도움이 되었기를 바랍니다 :)
답변2
Bash는 기본적으로 경로와 파일 이름만 자동 완성합니다. 그러나 메커니즘은 확장 가능하며 bash는 다양한 프로그램에 대해 다양한 자동 완성을 수행하도록 가르칠 수 있습니다. 예를 들어, git
경로 이름뿐 아니라 하위 명령 이름(복제, 커밋)과 개정도 자동 완성할 수 있습니다. 확장자 없이 파일 이름을 gzip -d
자동 완성하는 것을 거부하는 경우와 같이 편리할 때도 있지만 성가실 때도 있습니다 ..gz
Bash 완성은 일반적으로 다음에서 구성됩니다 . 여기서라는 파일을 찾을 /etc/bash_completion.d
수 있습니다 . vim
이 파일에는 vim
명령줄 자동 완성 규칙이 포함되어 있습니다.
이제 두 가지 옵션이 있습니다.
- 사용자가 예상하는 대로 파일을 자동 완성 경로로 수정하세요.
- 특수 규칙을 비활성화
vim
하고 기본 경로 자동 완성만 수행하려면 이 파일을 삭제하세요.
물론, 향후 릴리스에서 수정될 수 있도록 문제를 설명하는 버그 보고서도 제출하세요. :)
답변3
bash 완성을 다시 설치할 수도 있습니다.
apt-get install --reinstall bash-completion
/etc/bash.bashrc 파일을 살펴보세요:
nano /etc/bash.bashrc
그리고 다음 줄의 주석 처리가 완전히 제거되었는지 확인하세요.
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
그런 다음 터미널 세션을 다시 시작하십시오.