vim 명령으로 배쉬 자동 완성


13

bash vim에서 경로가 두 디렉토리보다 깊은 곳에서 명령을 실행할 때 경로 자동 완성이 최근에 작동을 멈췄습니다 ( ls및 같은 다른 명령에서 계속 작동 함 cd).

예를 들어, 입력 ls .config/btsync/bt한 다음 Tab 키를 누르면로 확장됩니다 ls .config/btsync/btsync.conf.

입력 vim .config/bt한 다음 Tab 키를 누르면로 확장됩니다 vim .config/btsync/.

그러나 입력 vim .config/btsync/bt한 다음 Tab 키를 누르면 아무 일도 일어나지 않습니다 ( 위 vim .config/btsync/btsync.confls예와 같이 확장 될 것으로 예상합니다) .

내 사용자로 실행할 때와 su로 실행할 때도 같은 문제가 발생합니다.

bash-completion의 이전 버전과 관련된 문제를 언급 한이 게시물 을 읽었 지만 2.1-5를 실행 중입니다.

업데이트 : 몇 가지 추가 테스트 후, 루트 문제는 bash가 파일 이름이 아닌 디렉토리 이름 완성 한다는 것 입니다.

업데이트 : 그것은 bash-completion전체 원인이었습니다. 허용되는 답변에 대한 두 번째 의견을 참조하십시오.

이 행동의 잠재적 원인에 대한 제안은 감사하게 받아 들여질 것입니다!


당신의 게시 .bashrc!
Gilles 'SO- 악한 중지'

필요에 따라 내 .bashrc게시물에 연결하십시오 .
TheRogueWolf

원인이 발견되었으므로 .bashrc, .aliases 및 .functions에 대한 링크가 문제와 관련이없는 것으로 제거되었습니다.
TheRogueWolf

데비안 9와 같은 문제, 일부 설치는 아니지만 전부 : $
Philippe Gachoud

답변:


10

나는 당신을 위해 더 많은 연구를했고 여기에 내가 찾은 것이 있습니다-자동 완성의 열쇠는 bash명령 complete입니다. vim사용 규칙을 인쇄 할 수 있습니다 .

complete -p vim

마찬가지로 다음을 사용하여 이러한 특정 규칙을 제거 할 수 있습니다.

complete -r vim

이 명령은 추가 경로없이 일반적인 경로와 파일 이름 완성을 기본값으로 재설정합니다. 아마 당신이 원하는 것입니다.

자세한 내용 은 명령 에 대한 섹션을 확인 help complete하거나 man bash찾으십시오 ( completebash 내장 기능이므로 bash 맨 페이지에 설명되어 있습니다).

마지막 포인트는 - 위의 변경은 현재에 영향을 bash당신이 모든 로그인이를 넣어 후 정력 규칙을 제거하려면, 세션을 complete -r vim당신에게 ~/.bashrc.

희망이 있습니다 :)


그랬어. 감사합니다 complete -p vim반환 명령 complete -F _filedir_xspec vim에 의해 제거 complete -r vim문제를 해결하는 명령. complete명령과 -p 스위치가 반환 한 정보를 약간 읽어 보겠습니다 . 왜이 행동이 바뀌 었는지 약간 당황하여 조사 할 것입니다.
TheRogueWolf

3
bash-completion이 결국 범인 인 것처럼 보입니다. 이 _filedir_xspec기능은 /usr/share/bash-completion/bash_completion디렉토리 만 완성합니다. 을 bash-completion제거하고 complete -r vim내 라인을 제거 .bashrc하고 다시 부팅하여 vim이제 예상대로 작동합니다.
TheRogueWolf

3

Bash는 기본적으로 경로와 파일 이름 만 자동 완성합니다. 그러나 메커니즘은 확장 가능하며 bash는 다른 프로그램에 대해 다른 자동 완성을 수행하도록 가르 칠 수 있습니다. 예를 들어 git경로 이름 대신 하위 명령 이름 (복제, 커밋) 및 개정을 자동 완성 할 수 있습니다. 때로는 편리하고 때로는 성가시다-예를 들어 확장자 gzip -d가없는 파일 이름 자동 완성을 거부하는 경우 .gz.

배쉬 완성은 일반적으로 구성됩니다 /etc/bash_completion.d-아마도 vim거기에서 호출 된 파일을 찾을 수 있습니다. 이것이 vim명령 줄에 대한 자동 완성 규칙을 포함하는 파일입니다 .

이제 두 가지 옵션이 있습니다.

  1. 사용자가 예상 한대로 파일을 자동 완성 경로로 수정하십시오.
  2. 파일을 제거하여 특수 vim규칙 을 비활성화 하고 기본 경로 자동 완성 만 수행하십시오.

물론 향후 버전에서 수정 될 수 있도록 문제를 설명하는 버그 보고서를 제출하십시오. :)


많은 감사 위대한 설명 : 내가이의 모습을 했어 /etc/bash_completion.d및 만이 hg파일이 존재하는 (의욕에 대한). 아주 이상한.
TheRogueWolf

1
그런 다음 다른 곳에 있어야합니다. 시도 /usr/share/bash-completion/모두에서 파일 또는 목록 vim패키지 또는에서 bash또는 bash-completion(가 아치 리눅스에서 호출 확실하지 방법) 패키지를. 어딘가에있을거야.
MLu

1
bash-completion패키지 쇼의 파일 목록 /usr/share/bash-completion/completions에는 많은 프로그램에 대한 규칙이 포함되어 있지만 포함되지는 않습니다 vim. vim패키지 와 함께 설치된 파일을 나열 하면 완료 관련 파일이 표시되지 않으며 전체 시스템을 검색하면 find / -name vim완료 관련 파일이 표시되지 않습니다.
TheRogueWolf

2

bash-completion을 다시 설치할 수 있습니까? 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

그런 다음 터미널 세션을 다시 시작하십시오.


를 제거 bash-completion하고 vim동작을 테스트 한 다음 다시 설치 bash-completion하고 테스트하려고했지만 두 상황에서 여전히 동일한 문제가 발생했습니다. 나열된 줄이에 없습니다 /etc/bash.bashrc. 그러나이 줄은[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
TheRogueWolf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.