Python 3 için Vim Kod Tamamlama


26

Debian Jessie kullanıyorum ve şu anki vim-nox'unu kullanıyorum (+ python-python3 ile). Python 3 kod tamamlama ile mücadele ederken Python 3'te programlamaya çalışırken çok zorlanıyorum.

YouCompleteMe, Python3'ü hiç desteklemiyor. jedi-vim, Python 3'ün tamamlanmasını destekliyor, ancak doğru anlamış olsaydım sadece + python3 seçeneğine sahip olsaydım. Debian Developers'ın çeşitli yayınlarından Vim'i + python3 bayrağıyla derlemek gerçekten işe yaramıyor gibi görünüyor. Bu nedenle python modu eklentisi ile kaldı.

Python kipinin bakımsız olduğu gerçeğinin yanı sıra (açık çekme istekleri ve son taahhütlere bakınız) ve şu anda ana dalında ip ile ilgili büyük bir hata var, YouCompleteMe ile etkileşime giriyor. Çalışmak için bazı Python 3 kod tamamlamaları alıyorum, ancak yalnızca YouCompleteMe işlevini tamamen devre dışı bırakırsam. Python filetypes için kara listeye YCM veya python dosyaları için YCM tamamlamanın devre dışı bırakılması işe yaramazsa, vim'i her açtığımda bir YCM uyarısı alıyorum.

Yani benim sorularım:

YouCompleteMe (diğer programlama dilleri için istiyorum) devre dışı bırakılmazken mevcut bir Debian dağıtımında çalışmak için bir Python 3 otomatik tamamlamasını nasıl alabilirim? Böyle önemli bir programlama dili için kod tamamlama işlemi için şu anda tek bir eklenti nasıl olur? (Python 3 artık yeni kabul edilemez ..)?


2
"Nasıl devam ettirilmemiş bir eklenti bu kadar önemli bir programlama dili için kod tamamlamada şu andaki tek seçenek " -> Hemen hemen hiçbir Python 3 projesi yok, hemen hemen tüm Python programları Python 2 ve 3'te çalışıyor, Python 2 Tamamlama neredeyse herkes için iyi olmalı.
Martin Tournoij

@Carpetsmoker ile anlaşmaya varıldı. Vim, Python'un kutudan çıkarılmasıyla geliyor ve Python3 ile de harikalar yaratıyor. Aslında, Vim'e yerleşik olarak gelen varsayılan pythoncomplete, kullandığım şeydir. YCM yok, Jedi-vim yok, Python modu yok. Hala istersen cevabımı gör + python3
akshay

Pythoncomplete'yi yeni kontrol ettim, bu betiğin normal bir vim kurulumuna dahil olduğunu bilmiyordum. Bu kesinlikle güzel bir temel seçenek. Pythoncomplete'nin işlev çağrısına parantez eklemesinin kolay bir yolunu biliyor musunuz (örneğin, baskı (''))?
xt440

Bence bunu kendiniz değiştirmek zorunda kalacaksınız. Kaynak burada vim.org adresinde mevcuttur: vim.org/scripts/script.php?script_id=1542 . Kuşkusuz, oldukça eski, ama benim için oldukça iyi çalışıyor.
akshay

Yanıtlar:


17

İdeal yol Vim'in kaynağını almak ve kendin derlemektir.

Adım 1: Debian benzeri sistemler için gerekli paketleri edinin:

sudo apt-get build-dep vim

2. Adım: Clone Vim'in kaynak kodu:

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

Adım 3: Yapılandır, Yap, Kur

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

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

Adım 4: Tamam! + Python3 desteği ile büyük bir vim sürümüne sahip olmalısınız. Ayrıca + pano desteğine sahiptir, böylece sistem panonuzla ve bir GUI sürümüyle kullanabilirsiniz.

Tabii ki, size istemediğiniz yapılandırmak bayrakları kaldırmak veya bazı in ekleyebilir. YouCompleteMe aslında kaynağından Vim nasıl oluşturulacağını açıklayan adanmış oldukça uzunluk wiki vardır burada


Hızlı cevabın için teşekkürler. + Python3 / dyn ve + python / dyn desteği ile vim üretebildim. Ama bu benim sorunumu çözmüyor. Vim başlar başlamaz, YouCompleteMe başlar (bildiğim kadarıyla her zaman python2'yi başlatır). Girdiğimde :echo has('python3')alırım 0, :echo has('python')geri döner 1. Benim .vimrc aşağıdaki seçenekleri var, ama onlar yardım etmez: 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. adım için, bunun yerine tavsiye ederim:apt-get build-dep vim
200_success

@ 200_success, bunun pano desteği için gerekli x11 öğelerini de aşağı çekip çekmediğinden emin değilim. Kontrol etmek için yanımda linux makinesi yok.
akshay

Package.debian.org/jessie/vim adresinden , .dsckenar çubuğundaki linke bakınız. Önerdiğiniz tüm paketlerin mercurialdoğrudan ya da geçişli olarak listelendiğine inanıyorum Build-Depends. Özellikle, libgnomeui-devbu bağımlılıkların çoğundan muhtemelen sorumludur.
200_success

@ 200_success, yeterince adil, teşekkürler! Yayın güncellendi.
akshay

4

jedi-vim, şimdi vim'de + python3 desteği ile benim için iyi çalışıyor. In my .vimrc için aşağıdaki seçeneği eklendi: let g:jedi#force_py_version = 3.


4

Bunu kendime her şeyden çok bir not olarak yazmak, ancak belki bu bazıları için yararlı olacaktır: Arch Linux'ta python3 ile derlenmiş bir vim sürümü yükleyebilirsiniz:

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

Y yazın; bu, mevcut vim'inizi python3 etkin vim ile değiştirir.

Sonra:

# pacman -S vim-jedi

python3 için otomatik tamamlamayı yükler.


4

Birkaç haftadan beri YouCompleteMe , Jedi'yi bir JediHTTP sarmalayıcı aracılığıyla kullanarak Python3 tamamlamayı desteklemektedir. Sadece YouCompleteMe (jedi-vim kurmaya gerek yoktur) kurulum talimatlarına göre kurun ve aşağıdaki satırı ekleyin .vimrc:

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

Bu, YCM'yi Python3 ile Jedi kullanmaya zorlar (varsayılan, Jedi'yi Python2 olan ycmd sunucusu tarafından kullanılan Python yorumlayıcısıyla kullanmaktır).

+python3Vim'iniz bayrakla veya bayraksız derlenmişse, bu işe yarar - Python3 otomatik tamamlama (ve belgeler daha fazlasını arar) alırsınız.


1

Biri python 2, diğeri python 3 kullanarak sürekli olarak iki python projesi arasında geçiş yapmam gereken bir pozisyondayım.

İlk önce python 3 ile (vim3 ile başladım) vim ek bir sürümünü derledim ve eklenti yöneticisi olarak vundle kullanıyorum.

Benim .vimrc benim var:

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'

Ben vim3'ü çalıştırdığımda sizi tamamlamayı devre dışı bırakıyor, ancak bunun yerine jedi-vim otomatik tamamlama özelliğine sahibim. Sadece yeni kullanmaya başladım ve bu blog yazısı birlikte uyumlu olmadığını söylüyor ama benim için her ikisinde de otomatik tamamlama çalışmaları, jedi'nin tanımlamalı çalışmaları, python kipinin pylint çalışmaları ve başlangıçta hiçbir eklenti şikayeti yok. Şimdiye kadar hepsi iyi :)


0

Neovim'e açıksanız deoplete ve deoplete-jedi kullanın . Tecrübelerime göre bu, YCM'nin biraz güçlük çektiği yerlerde oldukça iyi çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.