프로그래밍에 vim 자동 완성 기능 이름, 변수 등을 사용할 수 있습니까?


56

많은 IDE는 사용자 유형에 따라 함수 이름, 변수, 메소드 이름 등을 자동으로 완성합니다. 가장 좋은 것은 언어의 내장 라이브러리와 동일한 프로그램의 다른 파일에 이미 정의 된 이름을 기반으로 이름을 완성합니다.

예를 들어 다음 Python 프로그램을 입력 할 때

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

eatF은 자동으로 eatFood()사용 가능한 자동 완성 옵션 으로 표시 됩니다.

Vim에이 기능이 있습니까? 그렇다면 어떻게 활성화합니까?

답변:


42

vim에는 자동 완성 기능이 여러 가지 있습니다. 한 가지 방법은 SuperTab 을 사용하는 입니다. 이렇게하면 언제든지 탭 완성 기능을 사용하는 방법이 제공됩니다. 이를 Tab통해 단어를 부분적으로 입력 한 후 적중 목록을 얻을 수 있습니다. 예를 들어, 입력은 eatF다음 Tab에 확장eatFood.

참고 :이 사진은 모두 실제 예제 GIF에 연결됩니다.

수퍼 탭 완성

Vim은 훌륭한 다른 옵션을 가지고 있습니다. :h ins-completion다양한 내장 완료 옵션을 보려면 읽어야 합니다. 정력의 사용 Ctrl- XCtrl- O, 같은 파이썬 인식 플러그인과 함께 제다이 완료 맛을 제공 할 수 있습니다. 제다이가 전 완료에 문서를 제공하도록 구성 할 수 있습니다 (이것은 무엇인가 Ctrl- XCtrl- O않습니다). 완료 후보에 대한 문서가 분할 창에 나타납니다.

ctrlxctrlo 완성

비슷한 플러그인이지만 다른 옵션을 사용하면 모든 종류의 동작이 발생합니다. 예를 들어, 자동 완성을 요구할 필요가 없습니다 (필요한 경우). 대신 단어의 글자 수 (예 : 2 또는 3)를 입력하면 플러그인이 메뉴에서 가능한 완성을 지능적으로 제공하려고 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

그래서 짧은 대답은 그렇습니다! 그러나 구성 프로세스는 약간 복잡 할 수 있습니다. 나는 그것을 vim을 마스터하는 긴 계단의 한 단계라고 생각합니다.


나는 그것들을 모두 시험해 보았고 항상 SuperTab으로 돌아 왔습니다.
craigp February

1
나는 또한 YouCompleteMe 플러그인을 좋아합니다. 유형을 제안하고 제안을 선택하거나 무시할 수 있습니다. 예, 시각적으로 무시하기는 어렵지만 키 입력이 적기 때문에 워크 플로에서 방해가되지 않습니다.
Thriveth

3
애니메이션이 gif 애니메이션에 연결되어 있다는 점에서 애니메이션을 "클릭시"로 변경했습니다.
davidlowryduda

1
종속성을 설치할 루트가 없기 때문에 업무용 컴퓨터에서 YouCompleteMe를 사용할 수 없습니다. SuperTab이 그 다음으로 최고의 선택입니다.
Charles Clayton

@mixedmath 내 경우에는 superTab이 작동하지 않습니다.
alhelal

24

이러한 기능, 즉 자동 완성을 위해 현재 파일 (및 열려있는 모든 파일 검색)은 기본적으로 Ctrl+P다음을 사용하여 활성화해야합니다 .

사용중인 자동 완성 스크린 샷

당신은 갈 수 n 개의 와 내선 제안 Ctrl+N1, P 와 revious 제안 Ctrl+P및 (오른쪽 제안 후 추가됩니다) 모든 문자를 입력하여 선택합니다.


1
편집자 (Jasper) : 앞으로 쓸 내용이 아니라 파일의 시작 부분에있는 내용이 아니라 최근에 작성한 내용을 다시 쓰고 싶습니다. 따라서 ^P더 자연스러운 IMHO입니다. 그렇지 않으면 편집 해 주셔서 감사합니다 (오른쪽 버튼을 클릭하고 +2를 얻었기를 바랍니다).
yo '

1
그래, 나는 그 상상의 인터넷 포인트를 얻었다 :) 나는 항상 제안 목록이 알파벳순으로 정렬 될 것이라고 생각했다 ...
Jasper

@Jasper의 출현 순서는 (적어도 분명히 위의 내용을 참조하십시오 world,word,wood. 그래서 ^P(나는 거의 심지어 긴 파일 목록의 3 개 항목보다 더 갈) 매우 편리 마지막으로 사용 된 완성이다.
yo '

protip :inoremap <C-Space> <C-N>
wchargin

20

Vim은 기본적으로 완료를 지원합니다. Vim에서 지원하는 다양한 완료 사항에 대해 읽을 수 있습니다 :h ins-completion.

일반적으로, 내가 찾은 모든 목적을 위해 ins-completions는 내 취향에 충분하지만 ins-completions가 제공하는 것보다 더 많은 가치를 더하는 완성 플러그인이 있습니다. NeoComplete , YCM (YouCompleteMe) 은 동일합니다. 그들은 서로 다른 유형의 완성을 더 정확하게 결합하려고 노력한다는 점에서 더 발전했으며, 고급 캐싱 메커니즘을 가지고 있기 때문에 더 빠른 경향이 있습니다. YCM은 더 나은 IntelliSense를 제공하기 위해 외부 컴파일러 / 유틸리티와 함께 ​​작업하기까지합니다.


9

예, vim에 대한 자동 완성 스크립트가 존재합니다. "최상의"선택은 프로그래밍 언어에 따라 다릅니다. 예제 코드가 Python이므로 Jedi를 살펴 보는 것이 좋습니다 . 그 위에 구축 당신은 나를 완료 다른 언어에 대한 지원이있는 존재,하지만 때로는 너무 커서로 볼 수 있습니다. 다른 언어의 경우 vim 스크립트 에서 긴 세트를 찾아 볼 수 있습니다 .


7

삽입 모드에서 단어의 첫 두 문자를 입력 한 후 다음을 누르십시오.

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

프로그램에서 변수 이름을 입력 할 때 특히 유용합니다.

'완료'옵션은 키워드 검색 위치 (파일, 태그 파일, 버퍼 등 포함)를 제어합니다.

'completeopt'옵션은 완료 방법 (예 : 메뉴 표시 여부)을 제어합니다.

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