2010-10-07 37 views
12

Tôi sử dụng vim để mã hóa và mã hóa python nói riêng. Thường thì tôi muốn thực hiện bộ đệm hiện tại với trình thông dịch python. (ví dụ để chạy unittests), thường tôi làm điều này với :!python % <Enter>Đặt python virtualenv trong vim

scenatio này sẽ hoạt động tốt với python toàn cầu, nhưng tôi muốn chạy virtualenv python thay thế. Làm thế nào để kích hoạt virtualenv trong vim? Có thể chuyển virtualenv trên thời gian chạy không?

Tôi đang sử dụng macvim

Trả lời

15

Đây là những gì tôi sử dụng (xin lỗi phần đánh dấu là không hợp lệ).

" Function to activate a virtualenv in the embedded interpreter for 
" omnicomplete and other things like that. 
function LoadVirtualEnv(path) 
    let activate_this = a:path . '/bin/activate_this.py' 
    if getftype(a:path) == "dir" && filereadable(activate_this) 
     python << EOF 
import vim 
activate_this = vim.eval('l:activate_this') 
execfile(activate_this, dict(__file__=activate_this)) 
EOF 
    endif 
endfunction 

" Load up a 'stable' virtualenv if one exists in ~/.virtualenv 
let defaultvirtualenv = $HOME . "/.virtualenvs/stable" 

" Only attempt to load this virtualenv if the defaultvirtualenv 
" actually exists, and we aren't running with a virtualenv active. 
if has("python") 
    if empty($VIRTUAL_ENV) && getftype(defaultvirtualenv) == "dir" 
     call LoadVirtualEnv(defaultvirtualenv) 
    endif 
endif 

Lưu ý rằng bạn cần phải có MacVim được biên dịch dựa vào Python bạn đang sử dụng cho virtualenv, ví dụ: nếu bạn đã tải Python 2.7 từ Python.org, bạn nên biên dịch lại MacVim bằng cách sử dụng --with-python-config-dir=/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config làm đối số cho ./configure.

Hy vọng điều đó sẽ hữu ích!

CHỈNH SỬA: Chỉ cần một lưu ý ghi nhận tác giả: Rất nhiều công việc thám tử đã được viết vào ditty nhỏ này được thực hiện bởi this blogger và anh xứng đáng nhận được một số tín dụng.

+0

wow, tuyệt, đây là những gì Tôi đang tìm kiếm, cảm ơn rất nhiều! Tôi không biết virtualenv tạo ra điều này activate_this.py –

+0

Hi dwf, bạn có thể xem câu hỏi của tôi ở đây để xem tại sao đầu ra của tôi là lạ? http://stackoverflow.com/questions/17288843/macvim-uses-wrong-python-virtualenv – Lionel

5

Kích hoạt virtualenv trước khi bắt đầu vim. Bạn sẽ tự động nhận được phiên bản thông dịch tương ứng.

+0

Tôi đang sử dụng MacVim, và tôi bắt đầu từ Dock, vì vậy nó không thực sự là một lựa chọn tốt ... Theo như tôi hiểu kích hoạt virtualenv là tất cả về sửa đổi PATH, PYTHONHOME và PYTHONPATH env vars, có thể một số khác nữa. Tôi không quan tâm đến việc kích hoạt 'script' của virtualenv thành vim, tôi đã tự hỏi liệu có một giải pháp hiện có hay không. –

+0

Tôi thấy điều này không hoạt động nếu python virtualenv là một phiên bản khác với phiên bản vim biên dịch (ví dụ: 2 vs 3) – hwjp

+0

Xin lỗi, không hoạt động với tôi OSX + MacVim – cmcginty

2

Ngoài ra còn có một plugin vim trên github:

https://github.com/jmcantrell/vim-virtualenv

Tôi đã không thử nó, nhưng có vẻ như để giải quyết câu hỏi là tốt.

+2

Tôi đã thử điều này, nhưng nó dường như không hoạt động trên Mac OSX 10.8 (Mountain Lion) - một số vấn đề cơ bản khác có lẽ tồn tại – Lionel

+0

Tôi đang gặp sự cố khi làm việc với MacVim. – Chris

+1

@Chris: Điều này rất có thể là do [vấn đề này] (http://stackoverflow.com/questions/9853584/how-to-use-correct-ruby-in-vim-how-to-modify-path-in -vim/12146694 # 12146694). – Nolsto

0

vấn đề này thực sự làm phiền tôi trong một thời gian dài cho đến khi tôi sử dụng plugin của vim-conda. Chỉ cần thêm Plugin 'cjrh/vim-conda' vào ~/.vimrc của bạn và nó sẽ hoạt động. Bạn cũng có thể xem hướng dẫn chi tiết https://github.com/cjrh/vim-conda.

Các vấn đề liên quan