เสร็จสิ้นการเป็นกลุ่มรหัสสำหรับ Python 3


26

ฉันใช้ Debian Jessie และใช้ vim-nox ปัจจุบัน (พร้อม + python -python3) ฉันมีช่วงเวลาที่ยากลำบากในการลองโปรแกรมใน Python 3 เนื่องจากฉันต่อสู้กับการทำให้โค้ด Python 3 เสร็จสมบูรณ์

YouCompleteMe ไม่รองรับ Python3 เลย jedi-vim รองรับ Python 3 ที่สมบูรณ์ แต่ถ้าฉันมีตัวเลือก + python3 เท่านั้นถ้าฉันเข้าใจถูกต้อง จากโพสต์หลายรายการจากนักพัฒนา Debian ดูเหมือนว่าการรวบรวม Vim ด้วยแฟล็ก + python3 นั้นใช้งานไม่ได้ ดังนั้นฉันเหลือปลั๊กอิน python-mode

นอกเหนือจากข้อเท็จจริงที่ว่าโหมดของหลามนั้นดูเหมือนจะไม่ได้ถูกทำให้ไร้ประโยชน์ (ดู pull-Request และ last commits) และในปัจจุบันมีข้อผิดพลาดอย่างมากเกี่ยวกับเชือกในสาขาหลักของมันมันรบกวน YouCompleteMe ฉันจะได้รับโค้ด Python 3 ให้ใช้งานได้ แต่ถ้าฉันปิดการใช้งาน YouCompleteMe โดยสิ้นเชิง ขึ้นบัญชีดำ YCM สำหรับประเภทไฟล์หลามหรือปิดการใช้งานความสมบูรณ์ของ YCM สำหรับไฟล์หลามไม่ทำงานฉันได้รับคำเตือน YCM ทุกครั้งที่ฉันเปิด vim

ดังนั้นคำถามของฉันคือ:

ฉันจะทำให้การเติมข้อความอัตโนมัติของ Python 3 ทำงานบนการกระจาย Debian ปัจจุบันได้อย่างไรในขณะที่ไม่เลิกใช้ YouCompleteMe (ซึ่งฉันต้องการสำหรับภาษาโปรแกรมอื่น) ทำไมปลั๊กอินที่ไม่มีการระบายความร้อนจึงเป็นทางเลือกเดียวในขณะนี้สำหรับการเติมโค้ดให้สมบูรณ์สำหรับภาษาการเขียนโปรแกรมที่สำคัญ (Python 3 ไม่สามารถพิจารณาใหม่ได้อีกต่อไป .. )


2
"ทำไมปลั๊กอินที่ไม่มีการเปลี่ยนแปลงจึงเป็นทางเลือกเพียงอย่างเดียวในขณะนี้สำหรับการทำให้โค้ดสมบูรณ์สำหรับภาษาการเขียนโปรแกรมที่สำคัญ " -> ไม่มีโครงการ Python 3 เท่านั้นที่แทบไม่มีโปรแกรม Python เกือบทั้งหมดทำงานได้ดีบน Python 2 & 3 ดังนั้น Python 2 ความสมบูรณ์ควรเป็นสิ่งที่ดีสำหรับเกือบทุกคน
Martin Tournoij

เห็นด้วยกับ @Carpetsmoker Vim มาพร้อมกับ Python ที่สมบูรณ์แบบและใช้งานได้ดีกับ Python3 เช่นกัน ในความเป็นจริง pythoncomplete เริ่มต้นที่มาพร้อมกับ Vim คือสิ่งที่ฉันใช้ ไม่มี YCM ไม่มีเจได - vim ไม่มีโหมด Python ดูคำตอบของฉันหากคุณยังต้องการ + python3
akshay

ฉันเพิ่งตรวจสอบ pythoncomplete ฉันไม่ทราบว่าสคริปต์นี้รวมอยู่ในการติดตั้งเป็นกลุ่มปกติ นั่นคือตัวเลือกขั้นพื้นฐานที่ดีแน่นอน คุณรู้วิธีที่ง่ายสำหรับ pythoncomplete ในการเพิ่มเครื่องหมายวงเล็บให้กับการเรียกใช้ฟังก์ชัน (เช่น print ('')) หรือไม่?
xt440

ฉันคิดว่าคุณจะต้องแก้ไขด้วยตัวเอง แหล่งที่มาอยู่ที่นี่ใน vim.org: vim.org/scripts/script.php?script_id=1542 เป็นที่ยอมรับว่ามันค่อนข้างเก่า แต่ก็ใช้ได้ดีสำหรับฉัน
akshay

คำตอบ:


17

วิธีที่เหมาะคือการรับแหล่งที่มาของ Vim และรวบรวมด้วยตัวคุณเอง

ขั้นตอนที่ 1: สำหรับระบบที่เหมือน Debian รับแพ็คเกจที่ต้องการ:

sudo apt-get build-dep vim

ขั้นตอนที่ 2: ซอร์สโค้ดของ Clone 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 นอกจากนี้ยังมีการสนับสนุนคลิปบอร์ด + เพื่อให้คุณสามารถใช้กับคลิปบอร์ดระบบของคุณและรุ่น gui

แน่นอนว่าคุณสามารถลบการตั้งค่าสถานะที่คุณไม่ต้องการหรือเพิ่มเข้ามาได้ YouCompleteMe จริง ๆ แล้วมีวิกิที่มีความยาวพอสมควรโดยเฉพาะเพื่ออธิบายวิธีสร้าง Vim จากแหล่งที่นี่


ขอบคุณสำหรับคำตอบที่รวดเร็ว ฉันสามารถสร้างเสียงเรียกเข้าได้ด้วยการสนับสนุน + python3 / dyn และ + python / dyna แต่นั่นไม่ได้แก้ปัญหาของฉัน ทันทีที่ฉันเริ่มเป็นกลุ่ม 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_ ประสบความสำเร็จฉันไม่แน่ใจว่าจะดึงสิ่ง x11 ที่จำเป็นสำหรับการสนับสนุนคลิปบอร์ดหรือไม่ ฉันไม่มีเครื่อง linux กับฉันเพื่อตรวจสอบว่า
akshay

จากpackages.debian.org/jessie/vimให้ดู.dscไฟล์ที่ลิงก์ในแถบด้านข้าง ฉันเชื่อว่าทุกแพ็คเกจที่คุณแนะนำยกเว้นmercurialเป็นรายการโดยตรงหรือรายการBuild-Dependsต่อเนื่อง โดยเฉพาะอย่างยิ่งlibgnomeui-devอาจรับผิดชอบต่อการอ้างอิงเหล่านั้นจำนวนมาก
200_success

@ 200_ ประสบความสำเร็จยุติธรรมพอขอบคุณ! อัปเดตโพสต์แล้ว
akshay

4

jedi-vim ใช้งานได้ดีสำหรับฉันตอนนี้ด้วยการสนับสนุน + python3 ในกลุ่ม เพิ่มตัวเลือกต่อไปนี้ใน. vimrc ของฉัน: let g:jedi#force_py_version = 3.


4

การเขียนข้อความนี้ให้มากกว่าตัวฉันมากกว่าสิ่งอื่น ๆ แต่สิ่งนี้อาจมีประโยชน์สำหรับบางคน: บน Arch Linux คุณสามารถติดตั้งเวอร์ชันของ vim ที่คอมไพล์ด้วย python3:

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

พิมพ์ y และสิ่งนี้จะแทนที่กลุ่มที่มีอยู่ของคุณด้วยกลุ่มที่เปิดใช้งาน python3

แล้ว:

# pacman -S vim-jedi

จะติดตั้งการเติมข้อความอัตโนมัติสำหรับ python3


4

ตั้งแต่สองสามสัปดาห์YouCompleteMeรองรับการใช้งาน Python3 โดยใช้ Jedi ผ่านแผ่นหุ้ม JediHTTP ติดตั้ง YouCompleteMe เท่านั้น (ไม่จำเป็นต้องติดตั้ง jedi-vim) ตามคำแนะนำการติดตั้งและเพิ่มบรรทัดต่อไปนี้ใน.vimrc:

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

นี่บังคับให้ YCM ใช้ Jedi กับ Python3 (ค่าเริ่มต้นคือใช้ Jedi กับ Python interpreter เดียวกันกับที่ใช้โดยเซิร์ฟเวอร์ ycmd ซึ่งก็คือ Python2)

สิ่งนี้จะทำงานได้ไม่ว่าหาก Vim ของคุณถูกคอมไพล์ด้วยหรือไม่มี+python3แฟล็ก - คุณจะได้รับการเติมข้อความอัตโนมัติ Python3 (และการค้นหาเอกสารและอื่น ๆ )


1

ฉันอยู่ในตำแหน่งที่ฉันต้องสลับระหว่างโครงการงูหลามสองโครงการหนึ่งโครงการโดยใช้งูหลาม 2 กับงูหลาม 3 อีกครั้งตามที่คุณสังเกตเห็นว่าการคอมไพล์ของคุณไม่ทำงานกับงูหลาม 3

ก่อนอื่นฉันรวบรวมเวอร์ชันเพิ่มเติมของ vim ด้วย python 3 (ซึ่งฉันเริ่มด้วย vim3) และฉันใช้ 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 แต่ฉันมีการเติมข้อความอัตโนมัติ jedi-vim แทน ฉันเพิ่งจะเริ่มใช้มันและโพสต์บล็อกนี้บอกว่ามันเข้ากันไม่ได้ แต่สำหรับฉันการเติมข้อความอัตโนมัติทำงานได้ทั้งใน jedi go-to-definition works, pylint ของ python-mode ทำงานและไม่มีปลั๊กอินบ่นเมื่อเริ่มต้น ทุกอย่างดี :)


0

ใช้ deoplete และdeoplete-jediหากคุณเปิดให้ neovim จากประสบการณ์ของฉันสิ่งนี้ทำงานได้ค่อนข้างดีที่ YCM มีความยุ่งยากเล็กน้อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.