Vim 삽입 모드에서 파일 경로 자동 완성을 추가하는 방법이 있습니까?


81

나는 많은 쉘 스크립트를 작성하고 지속적으로 파일 경로를 입력해야합니다. 삽입 모드에서 Vim이 파일 경로를 자동 완성하도록하는 방법을 아는 사람이 있는지 궁금합니다. 좋아하는 셸에있을 때 탭하여 디렉토리 나 파일의 경로를 완성하는 것과 같습니다.

CTRLD셸의 기능을 Vim 삽입 모드로 가져올 수 있다면 추가 크레딧을받을 수 있습니다 (예 : 현재 경로에있는 파일 / 디렉토리 확인).


흥미로운 질문, 나는 :) 너무 답을 알고 싶어요
제이 쩡에게

@stephenmm Ctrl-D는 쉘에서 무엇을합니까? 내 bash 셸에서 텍스트를 입력하면 아무것도하지 않고 터미널을 닫습니다.
alhelal

@alhelal-CTRL-D가 내 오래된 쉘의 파일과 디렉토리를 표시하는 것 같습니다. 더 이상 CTRL-D 기능이 표시되지 않습니다.
stephenmm

답변:


163

를 들어 파일 이름 전 완료, 당신은 사용할 수 있습니다 :

Ctrl- XCtrl-F


11
또 다른 vim aha 순간 .... 감사합니다. 어쨌든 삽입 모드에서 탭을 사용하지 않기 때문에 이것을 .vimrc에 추가했습니다. imap <Tab> <CX> <CF>
stephenmm

4
삽입 모드에서 <tab>의 또 다른 좋은 용도는 <cn>입니다. 작업중인 파일의 다른 단어를 기반으로 입력중인 단어가 자동 완성됩니다. 변수 나 클래스 이름을 입력 할 때 항상 사용합니다.
Derek

검색 경로에 영향을 미칠 수있는 방법이 있습니까? C 파일에 #include 항목을 추가 할 때 경로는 파일을 연 위치와 관련이 없을 수 있습니다.
Rob Bradford

@RobBradford는 올바른 정보 (예 : cmake 기반 빌드 시스템을 사용하는 YCM-Generator에서 생성 한 .ycm_extra_conf.py를 사용)가 제공되면 YouCompleteMe를 사용해보십시오. 포함 폴더의 모든 경로 이름을 멋지게 자동 완성합니다.
Emile Vrijdags

파일 이름에 공백이 있으면 Vim이 자동 완성에 실패합니다. 그것을 고칠 방법이 있습니까?


18

@CMS 및 @michael 훌륭한 답변을 구축하려면

ctrl+ X ctrl+ f명령 시퀀스를 사용 하면 현재 디렉토리에있는 파일 목록이 표시됩니다. 나는 다른 파일 이름 사이를 위아래로 이동하기 위해 올바른 키를 찾는 데 잠시 시간을 할애합니다. 올바른 키는 Ctrl-n 및 Ctrl-p입니다. 거의 모든 다른 키 (예 :)를 사용 Space하여 선택하고 계속 입력 할 수 있습니다.

또한 삽입하려는 파일 / 디렉토리에 아직없는 경우 다음과 같이 파일 트리 구조로 이동할 수 있습니다.

  1. 선택적으로 디렉토리의 일부를 입력하십시오. ../../예를 들어 사용할 수도 있습니다 !
  2. 눌러 ctrl+ X ctrl+ f하고 목록에서 트리의 첫 번째 항목을 선택합니다.
  3. 그런 다음 올바른 항목이 강조 표시되는 동안 ctrl+를 f다시 눌러 디렉토리 트리 구조 아래의 다음 수준 목록을 표시합니다.

문서에 삽입 할 디렉토리 / 파일을 찾을 때까지이 작업을 계속할 수 있습니다.


6
3 단계에서 ctrl + x 및 ctrl + f를 의미 했습니까? ctrl + f 만 작동하지 않기 때문에 ctrl + n과 동일합니다. Btw 디렉토리에 공백이 있으면 여기에서 작동하지 않습니다 : /. 해결 방법을 알고 있습니까?
Rojo

0

비슷한 문제가 발생했습니다. 다음과 같은 해결책을 찾았습니다.

    sudo apt-get install realpath

그리고 VIM에서 일반 모드 유형으로 파일로 이동합니다.

    :r !realpath /path/to/file

! realpatch 이후 비 삽입 모드에서 탐색 할 때 키 버튼을 사용할 수 있습니다.

VOILA! TAB이 다시 작동합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.