Penyelesaian Kode Vim untuk Python 3

26

Saya menjalankan Debian Jessie dan menggunakan vim-nox saat ini (dengan + python -python3). Saya mengalami kesulitan mencoba program di Python 3, karena saya berjuang dengan penyelesaian kode Python 3.

YouCompleteMe tidak mendukung Python3 sama sekali. jedi-vim mendukung penyelesaian Python 3, tetapi hanya jika saya memiliki opsi + python3 jika saya memahaminya dengan benar. Dari beberapa posting dari Pengembang Debian tampaknya mengkompilasi Vim dengan flag + python3 tidak benar-benar berfungsi. Oleh karena itu saya dibiarkan dengan plugin mode python.

Selain fakta bahwa mode-python tampaknya tidak terawat (lihat permintaan tarik terbuka dan komit terakhir) dan saat ini memiliki bug besar mengenai tali di cabang masternya, itu mengganggu YouCompleteMe. Saya mendapatkan beberapa penyelesaian kode Python 3 untuk bekerja, tetapi hanya jika saya menonaktifkan YouCompleteMe sepenuhnya. Daftar hitam YCM untuk tipe file python atau menonaktifkan penyelesaian YCM untuk file python tidak berfungsi, saya mendapatkan peringatan YCM setiap kali saya membuka vim.

Jadi pertanyaan saya adalah:

Bagaimana saya bisa mendapatkan pelengkapan otomatis Python 3 untuk bekerja pada distribusi Debian saat ini sementara tidak menonaktifkan YouCompleteMe (yang saya inginkan untuk bahasa pemrograman lain)? Kenapa plugin yang tidak dirawat adalah satu-satunya pilihan saat ini untuk penyelesaian kode untuk bahasa pemrograman yang begitu penting (Python 3 tidak dapat lagi dianggap baru ..)?

xt440
sumber
2
"Kenapa plugin yang tidak dirawat adalah satu-satunya pilihan saat ini untuk penyelesaian kode untuk bahasa pemrograman yang begitu penting " -> Hampir tidak ada proyek hanya Python 3, hampir semua program Python berjalan dengan baik di Python 2 & 3, jadi Python 2 penyelesaian harus baik untuk hampir semua orang.
Martin Tournoij
Setuju dengan @Carpetsmoker. Vim hadir dengan penyelesaian Python di luar kotak, dan itu berfungsi dengan baik dengan Python3 juga. Sebenarnya, pythoncomplete default yang disertakan untuk Vim adalah apa yang saya gunakan. Tidak ada YCM, tidak ada Jedi-vim, tidak ada mode Python. Lihat jawaban saya jika Anda masih ingin + python3
akshay
Saya baru saja memeriksa pythoncomplete, saya tidak tahu bahwa skrip ini termasuk dalam instalasi vim yang normal. Itu jelas merupakan opsi dasar yang bagus. Apakah Anda mengetahui cara mudah bagi pythoncomplete untuk menambahkan tanda kurung ke panggilan fungsi (mis. Cetak (''))?
xt440
Saya pikir Anda harus memodifikasi itu sendiri. Sumber tersedia di sini di vim.org: vim.org/scripts/script.php?script_id=1542 . Memang, ini sudah cukup tua, tetapi itu bekerja cukup baik untuk saya.
akshay
github.com/klen/python-mode
bhathiya-perera

Jawaban:

17

Cara ideal adalah untuk mendapatkan sumber Vim dan kompilasi sendiri.

Langkah 1: Untuk sistem seperti Debian, dapatkan paket yang diperlukan:

sudo apt-get build-dep vim

Langkah 2: Kode sumber Clone Vim:

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

Langkah 3: Konfigurasi, Buat, Instal

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

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

Langkah 4: Selesai! Anda harus memiliki versi vim yang besar, dengan dukungan + python3. Ini juga memiliki dukungan + clipboard sehingga Anda dapat menggunakannya dengan clipboard sistem Anda, dan versi gui.

Tentu saja, Anda dapat menghapus flag konfigurasi yang tidak Anda inginkan atau menambahkan beberapa. YouCompleteMe sebenarnya memiliki wiki yang cukup panjang yang didedikasikan untuk menjelaskan cara membuat Vim dari sumber di sini

akshay
sumber
Terima kasih untuk jawaban cepat Mu. Saya dapat membangun vim dengan dukungan + python3 / dyn dan + python / dyn. Tapi itu tidak menyelesaikan masalah saya. Segera setelah saya memulai vim, YouCompleteMe dimulai (yang selalu dimulai python2 sejauh yang saya tahu). Ketika saya masuk :echo has('python3')saya dapatkan 0, sedangkan :echo has('python')kembali 1. Saya memiliki pilihan berikut di vimrc saya, tetapi mereka tidak membantu: 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
Untuk langkah 1, saya sarankan sebagai gantinya:apt-get build-dep vim
200_success
@ 200_sukses, saya tidak yakin apakah itu juga menurunkan barang-barang x11 yang diperlukan untuk dukungan clipboard. Saya tidak punya mesin linux untuk memeriksa.
akshay
Dari paket.debian.org/jessie/vim , lihat .dscfile yang tertaut di sidebar. Saya percaya semua paket yang Anda sarankan, kecuali mercurial, secara langsung atau transitif terdaftar sebagai Build-Depends. Secara khusus, libgnomeui-devmungkin bertanggung jawab atas banyak dari ketergantungan itu.
200_sukses
@ 200_sukses, cukup adil, terima kasih! Memperbarui pos.
akshay
4

jedi-vim berfungsi dengan baik untuk saya sekarang dengan dukungan + python3 di vim. Dalam menambahkan opsi berikut untuk .vimrc saya: let g:jedi#force_py_version = 3.

xt440
sumber
4

Menulis ini lebih sebagai catatan untuk diri saya sendiri daripada apa pun, tetapi mungkin ini akan bermanfaat bagi beberapa orang: di Arch Linux, Anda dapat menginstal versi vim yang dikompilasi dengan python3:

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

Ketik y dan ini akan menggantikan vim Anda yang ada dengan vim diaktifkan python3.

Kemudian:

# pacman -S vim-jedi

akan menginstal pelengkapan otomatis, untuk python3.

John Smith Opsional
sumber
4

Sejak beberapa minggu, YouCompleteMe mendukung penyelesaian Python3 menggunakan Jedi melalui pembungkus JediHTTP. Hanya instal YouCompleteMe (tidak perlu menginstal jedi-vim) sesuai dengan instruksi instalasi dan tambahkan baris berikut ke Anda .vimrc:

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

Ini memaksa YCM untuk menggunakan Jedi dengan Python3 (standarnya adalah menggunakan Jedi dengan interpreter Python yang sama yang digunakan oleh server ycmd, yaitu Python2).

Ini berfungsi tidak masalah jika Vim Anda dikompilasi dengan atau tanpa +python3flag - Anda mendapatkan pelengkapan otomatis Python3 (dan dokumentasi mencari dan banyak lagi).

cbaumhardt
sumber
1

Saya berada dalam posisi di mana saya harus terus-menerus beralih antara dua proyek python, satu menggunakan python 2 dan python 3. Seperti yang Anda catat, Anda kompleteme tidak berfungsi dengan python 3.

Pertama saya mengkompilasi versi tambahan vim dengan python 3 (yang saya mulai dengan vim3) dan saya menggunakan vundle sebagai plugin manager.

Di .vimrc saya, saya punya:

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'

Ini menonaktifkan Andacompleteme ketika saya menjalankan vim3, tetapi saya memiliki jedi-vim autocomplete sebagai gantinya. Saya baru saja mulai menggunakannya, dan posting blog ini mengatakan mereka tidak kompatibel bersama tetapi bagi saya autocomplete berfungsi di keduanya, karya definisi-jedi, pekerjaan pylint mode-python dan tidak ada plugin yang mengeluh saat startup. Semua baik sejauh ini :)

beluga.me
sumber
0

Gunakan deoplete dan deoplete-jedi jika Anda terbuka untuk neovim. Dalam pengalaman saya ini bekerja dengan baik, di mana YCM memiliki sedikit kerepotan.

Jongwook Choi
sumber