Python 3 용 Vim 코드 완성


26

Debian Jessie를 실행 중이며 현재 vim-nox (+ python -python3 사용)를 사용합니다. Python 3 코드 완성으로 어려움을 겪고 있으므로 Python 3에서 프로그래밍을 시도하는 데 어려움을 겪고 있습니다.

YouCompleteMe는 Python3을 전혀 지원하지 않습니다. jedi-vim은 Python 3 완성을 지원하지만 올바르게 이해하면 + python3 옵션이있는 경우에만 가능합니다. 데비안 개발자의 여러 게시물에서 + python3 플래그로 Vim을 컴파일하는 것은 실제로 작동하지 않는 것 같습니다. 따라서 파이썬 모드 플러그인이 남아 있습니다.

파이썬 모드가 유지 관리되지 않는 것 (오픈 풀 요청 및 마지막 커밋 참조)과 현재 마스터 브랜치의 로프와 관련하여 큰 버그가 있다는 사실 외에도 YouCompleteMe를 방해합니다. Python 3 코드 완성이 작동하지만 YouCompleteMe를 완전히 비활성화 한 경우에만 작동합니다. 파이썬 파일 형식의 경우 YCM을 블랙리스트에 올리거나 파이썬 파일의 경우 YCM 완료를 비활성화해도 작동하지 않습니다. vim을 열 때마다 YCM 경고가 표시됩니다.

그래서 내 질문은 :

YouCompleteMe (다른 프로그램 언어에 사용하려는)를 비활성화하지 않고 현재 데비안 배포판에서 작동하도록 Python 3 자동 완성을 얻으려면 어떻게해야합니까? 그러한 중요한 프로그래밍 언어를 위해 코드 완성을 위해 현재 유지 관리되지 않는 플러그인이 유일한 선택 인 이유는 무엇입니까?


2
"유지 관리되지 않는 플러그인은 어떻게 중요한 프로그래밍 언어를위한 코드 완성을위한 유일한 선택입니다 "-> Python 3 전용 프로젝트는 거의 없으며 거의 ​​모든 Python 프로그램이 Python 2 & 3에서 제대로 실행되므로 Python 2 완성은 거의 모든 사람에게 좋을 것입니다.
Martin Tournoij

@Carpetsmoker와 동의 함. Vim은 기본적으로 Python 완성 기능을 제공하며 Python3에서도 놀라운 기능을 수행합니다. 실제로 Vim에 내장 된 기본 pythoncomplete는 내가 사용하는 것입니다. YCM, Jedi-vim, Python 모드가 없습니다. + python3을 원한다면 내 대답을보십시오
akshay

방금 pythoncomplete를 체크 아웃 했는데이 스크립트가 일반 vim 설치에 포함되어 있다는 것을 몰랐습니다. 그것은 분명히 좋은 기본 옵션입니다. pythoncomplete가 함수 호출에 괄호를 추가하는 쉬운 방법을 알고 있습니까 (예 : print ( ''))?
xt440

나는 당신이 그것을 직접 수정해야한다고 생각합니다. 소스는 vim.org ( vim.org/scripts/script.php?script_id=1542)에 있습니다. 틀림없이, 그것은 꽤 오래되었지만 나에게는 꽤 잘 작동합니다.
akshay

답변:


17

이상적인 방법은 Vim의 소스를 가져 와서 직접 컴파일하는 것입니다.

1 단계 : 데비안 유사 시스템의 경우 필요한 패키지를 가져옵니다.

sudo apt-get build-dep vim

2 단계 : Vim의 소스 코드 복제 :

cd /tmp && git clone https://github.com/vim/vim.git && cd vim

3 단계 : 구성, 확인, 설치

./configure --with-features=huge --enable-multibyte --enable-python3interp \
    --enable-gui=gtk-2 --prefix=/usr

make VIMRUNTIMEDIR=/usr/share/vim/vim74
sudo make install

4 단계 : 완료! + python3을 지원하는 거대한 버전의 vim이 있어야합니다. 또한 + 클립 보드를 지원하므로 시스템 클립 보드 및 GUI 버전과 함께 사용할 수 있습니다.

물론 원하지 않는 구성 플래그를 제거하거나 추가 할 수 있습니다. YouCompleteMe에는 실제로 소스 에서 Vim을 빌드하는 방법을 설명하는 상당히 긴 위키가 있습니다.


빠른 답변 감사합니다. + python3 / dyn 및 + python / dyn 지원으로 vim을 빌드 할 수있었습니다. 그러나 그것은 내 문제를 해결하지 못합니다. vim을 시작하자마자 YouCompleteMe가 시작됩니다 (항상 내가 아는 한 python2를 시작합니다). 내가 입력하면을 :echo has('python3')얻는 0반면에을 :echo has('python')반환합니다 1. .vimrc에 다음 옵션이 있지만 도움이되지 않습니다 let g:ycm_path_to_python_interpreter = '/usr/bin/python3 let g:ycm_filetype_specific_completion_to_disable = { 'python' : 1 } let g:ycm_filetype_blacklist = { 'python' : 1 }.
xt440

1 단계의 경우 대신 다음을 권장합니다.apt-get build-dep vim
200_success

@ 200_success, 클립 보드 지원에 필요한 x11 항목을 가져 오는지 확실하지 않습니다. 그래도 확인할 리눅스 머신이 없습니다.
akshay

에서 packages.debian.org/jessie/vim 는 볼 .dsc의 사이드 바에서 링크 된 파일을. 를 제외하고 제안한 모든 패키지 mercurial가 직접 또는 전 이적으로로 표시되어 있다고 생각합니다 Build-Depends. 특히 libgnomeui-dev이러한 많은 종속성에 대한 책임이 있습니다.
200_Success 11

@ 200_ 성공, 충분히, 감사합니다! 게시물을 업데이트했습니다.
akshay

4

jedi-vimvim 에서 + python3을 지원하여 잘 작동합니다. 내 .vimrc에 다음 옵션을 추가했습니다 let g:jedi#force_py_version = 3.


4

이것을 다른 어떤 것보다 나 자신에 대한 메모로 작성하면 어쩌면 일부에게는 유용 할 것입니다 : 아치 리눅스에서는 python3으로 컴파일 된 vim 버전을 설치할 수 있습니다 :

# pacman -S vim-python3
resolving dependencies...
looking for conflicting packages...
:: vim-python3 and vim are in conflict. Remove vim? [y/N] y

y를 입력하면 기존 vim이 python3 enabled vim으로 바뀝니다.

그때:

# pacman -S vim-jedi

python3의 자동 완성을 설치합니다.


4

몇 주 후 YouCompleteMe 는 JediHTTP 래퍼를 통해 Jedi를 사용한 Python3 완성을 지원합니다. 설치 지침에 따라 YouCompleteMe (jedi-vim을 설치할 필요가 없음) 만 설치하고 다음 줄을 다음에 추가하십시오 .vimrc.

let g:ycm_python_binary_path = '/usr/bin/python3'

이 힘을 YCM Python3와 제다이를 사용 (기본값 Python2 인 ycmd 서버에 의해 사용되는 동일한 파이썬 인터프리터와 제다이를 사용하는 것입니다).

이것은 Vim이 +python3플래그 와 함께 또는 플래그 없이 컴파일 되든 상관없이 작동 합니다. Python3 자동 완성을 얻습니다 (그리고 문서를 조회하는 등).


1

나는 두 개의 파이썬 프로젝트 사이에서 끊임없이 전환 해야하는 위치에 있습니다. 하나는 파이썬 2를 사용하고 다른 하나는 파이썬 3을 사용합니다.

먼저 파이썬 3 (vim3으로 시작)으로 vim의 추가 버전을 컴파일하고 vundle을 플러그인 관리자로 사용합니다.

내 .vimrc에는 다음이 있습니다.

Plugin 'davidhalter/jedi-vim' " for python3
Plugin 'Valloric/YouCompleteMe' " for python2


if has('python3')
    let g:loaded_youcompleteme = 1 " disables loading it! doesnt support python3
    let g:jedi#force_py_version = 3
    let g:pymode_python = 'python3'

vim3을 실행할 때 youcompleteme를 비활성화하지만 대신 jedi-vim 자동 완성 기능이 있습니다. 방금 사용하기 시작 했으며이 블로그 게시물 은 호환되지 않지만 제다이의 go-to-definition 작품, python-mode의 pylint 작품 및 플러그인에 대한 자동 완성 기능이 있습니다. 지금까지 모든 좋은 :)


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