Hoàn thành mã Vim cho Python 3


26

Tôi đang chạy Debian Jessie và sử dụng vim-nox hiện tại (với + python -python3). Tôi đang gặp khó khăn khi cố gắng lập trình trong Python 3, khi tôi vật lộn với việc hoàn thành mã Python 3.

YouCompleteMe hoàn toàn không hỗ trợ Python3. jedi-vim không hỗ trợ hoàn thành Python 3, nhưng chỉ khi tôi có tùy chọn + python3 thì tôi mới hiểu đúng. Từ một số bài đăng từ Nhà phát triển Debian, có vẻ như việc biên dịch Vim với cờ + python3 không thực sự hoạt động. Vì vậy, tôi còn lại với plugin chế độ python.

Bên cạnh thực tế là chế độ python dường như không được biết đến (xem các yêu cầu kéo mở và các cam kết cuối cùng) và hiện tại nó có một lỗi rất lớn liên quan đến dây trong nhánh chính của nó, nó can thiệp vào YouCompleteMe. Tôi nhận được một số hoàn thành mã Python 3 để hoạt động, nhưng chỉ khi tôi vô hiệu hóa YouCompleteMe hoàn toàn. Danh sách đen YCM cho các kiểu tệp python hoặc vô hiệu hóa hoàn thành YCM cho các tệp python không hoạt động, tôi nhận được cảnh báo YCM mỗi khi tôi mở vim.

Vì vậy, câu hỏi của tôi là:

Làm cách nào tôi có thể tự động hoàn thành Python 3 để hoạt động trên bản phân phối Debian hiện tại trong khi không hủy kích hoạt YouCompleteMe (mà tôi muốn cho các ngôn ngữ lập trình khác)? Tại sao một plugin không rõ ràng là lựa chọn duy nhất tại thời điểm hoàn thành mã cho một ngôn ngữ lập trình quan trọng như vậy (Python 3 không còn có thể được coi là mới ..)?


2
"Tại sao một plugin không rõ ràng là lựa chọn duy nhất tại thời điểm hoàn thành mã cho một ngôn ngữ lập trình quan trọng như vậy " -> Hầu như không có dự án nào chỉ có Python 3, hầu như tất cả các chương trình Python đều chạy tốt trên Python 2 & 3, vì vậy Python 2 hoàn thành nên tốt cho hầu hết mọi người
Martin Tournoij 7/03/2015

Đồng ý với @Carpetsmoker. Vim đi kèm với việc hoàn thành Python ngoài hộp và nó cũng hoạt động kỳ diệu với Python3. Trong thực tế, pythoncomplete mặc định được tích hợp sẵn cho Vim là những gì tôi sử dụng. Không YCM, không Jedi-vim, không chế độ Python. Xem câu trả lời của tôi nếu bạn vẫn muốn + python3
akshay

Tôi vừa kiểm tra pythoncomplete, tôi không biết rằng tập lệnh này được bao gồm trong một bản cài đặt vim bình thường. Đó chắc chắn là một lựa chọn cơ bản tốt đẹp. Bạn có tình cờ biết một cách dễ dàng để pythoncomplete thêm dấu ngoặc vào hàm gọi (ví dụ như in ('')) không?
xt440

Tôi nghĩ bạn sẽ phải tự sửa đổi điều đó. Nguồn có sẵn ở đây trên vim.org: vim.org/scripts/script.php?script_id=1542 . Phải thừa nhận rằng nó khá cũ nhưng nó hoạt động khá tốt đối với tôi.
akshay 7/03/2015

Câu trả lời:


17

Cách lý tưởng là lấy nguồn của Vim và tự biên dịch nó.

Bước 1: Đối với các hệ thống giống như Debian, hãy lấy các gói cần thiết:

sudo apt-get build-dep vim

Bước 2: Sao chép mã nguồn của Vim:

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

Bước 3: Cấu hình, thực hiện, cài đặt

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

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

Bước 4: Xong! Bạn nên có một phiên bản lớn của vim, với sự hỗ trợ + python3. Nó cũng có hỗ trợ + clipboard để bạn có thể sử dụng nó với clipboard hệ thống của bạn và phiên bản gui.

Tất nhiên, bạn có thể xóa các cờ cấu hình mà bạn không muốn hoặc thêm một số. YouCompleteMe thực sự có một wiki khá dài dành riêng để giải thích cách xây dựng Vim từ nguồn tại đây


Cảm ơn vì câu trả lời nhanh của bạn. Tôi đã có thể xây dựng vim với sự hỗ trợ + python3 / dyn và + python / dyn. Nhưng điều đó không giải quyết được vấn đề của tôi. Ngay khi tôi bắt đầu vim, YouCompleteMe bắt đầu (luôn khởi động python2 theo như tôi biết). Khi tôi nhập :echo has('python3')tôi nhận được 0, trong khi :echo has('python')trả lại 1. Tôi có các tùy chọn sau trong .vimrc của mình, nhưng chúng không giúp được : 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

Đối với bước 1, tôi khuyên bạn nên thay thế:apt-get build-dep vim
200_success 7/03/2015

@ 200_success, tôi không chắc nếu điều đó cũng kéo xuống thứ x11 cần thiết cho hỗ trợ clipboard. Tôi không có máy linux để kiểm tra.
akshay

Từ gói.debian.org/jessie/vim , hãy xem .dsctệp được liên kết trong thanh bên. Tôi tin rằng tất cả các gói bạn đề xuất, ngoại trừ mercurial, được liệt kê trực tiếp hoặc quá cảnh như Build-Depends. Đặc biệt, libgnomeui-devcó lẽ chịu trách nhiệm cho nhiều phụ thuộc.
200_success 7/03/2015

@ 200_success, đủ công bằng, cảm ơn! Cập nhật bài viết.
akshay

4

jedi-vim hoạt động tốt với tôi bây giờ với sự hỗ trợ + python3 trong vim. Đã thêm tùy chọn sau vào .vimrc : let g:jedi#force_py_version = 3.


4

Viết điều này như một ghi chú cho bản thân tôi hơn bất cứ điều gì, nhưng có lẽ điều này sẽ hữu ích với một số người: trên Arch Linux, bạn có thể cài đặt phiên bản vim được biên dịch bằng python3:

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

Nhập y và điều này sẽ thay thế vim hiện tại của bạn bằng vim kích hoạt python3.

Sau đó:

# pacman -S vim-jedi

sẽ cài đặt tự động hoàn thành, cho python3.


4

Kể từ một vài tuần, YouCompleteMe hỗ trợ hoàn thành Python3 bằng cách sử dụng Jedi thông qua trình bao bọc JediHTTP. Chỉ cài đặt YouCompleteMe (không cần cài đặt jedi-vim) theo hướng dẫn cài đặt và thêm dòng sau vào .vimrc:

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

Điều này buộc YCM sử dụng Jedi với Python3 (mặc định là sử dụng Jedi với cùng trình thông dịch Python được sử dụng bởi máy chủ ycmd, đó là Python2).

Điều này hoạt động bất kể nếu Vim của bạn được biên dịch có hoặc không có +python3cờ - bạn sẽ tự động hoàn thành Python3 (và tài liệu tìm kiếm và nhiều hơn nữa).


1

Tôi đang ở một vị trí mà tôi phải liên tục chuyển đổi giữa hai dự án python, một dự án sử dụng python 2 khác python 3. Như bạn đã lưu ý, youcompleteme không hoạt động với python 3.

Đầu tiên tôi biên dịch một phiên bản bổ sung của vim với python 3 (mà tôi bắt đầu bằng vim3) và tôi sử dụng vundle làm trình quản lý plugin.

Trong .vimrc của tôi, tôi có:

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'

Nó vô hiệu hóa youcompleteme khi tôi chạy vim3, nhưng tôi có tự động hoàn thành jedi-vim. Tôi chỉ mới bắt đầu sử dụng nó và bài đăng trên blog này nói rằng chúng không tương thích với nhau nhưng đối với tôi, tự động hoàn thành hoạt động trong cả hai, các tác phẩm đi đến định nghĩa của jedi, pylint của chế độ python và không có plugin nào phàn nàn khi khởi động. Tất cả đều tốt cho đến nay :)


0

Sử dụng deoplete và deoplete-jedi nếu bạn mở neovim. Theo kinh nghiệm của tôi, nó hoạt động khá tốt, trong đó YCM có một chút rắc rối.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.