Значит что мне необходимо: 1. Отправить на выполнение текущий буфер(перед этим сохранить его) 2. Поиск .env. Если .env нет в текущей директории и выше, вплоть до ~, то использовать системный python, иначе - использовать .env/bin/python. 3. Прерывание процесса исполнения
Частично решил: 1.
(setq compilation-ask-about-save nil) ; don't ask save y/n before compile
;; PYTHON
(defun my-compile ()
  "Use compile to run python programs"
  (interactive)
  (compile (concat "python " (buffer-name))))
(setq compilation-scroll-output t)
(global-set-key (kbd "C-x r") (lambda () (interactive) (setq current-prefix-arg '(4)) (call-interactively 'my-compile)))
По C-x r происходит выполнение скрипта.
2. Есть на вим функция, честно говоря не знаю как ее переписать
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
function CheckVirtualEnv(env)
    let s:old_path=expand('%:p:h')
    while !isdirectory(a:env) && getcwd () != "/"
        cd ..
    endwhile
    cd .
    call LoadVirtualEnv(getcwd() . "/" . a:env)
    execute 'cd' fnameescape(s:old_path)
    " set keywordprg=pydocX.Y
    let res=split(system('python --version'))[1][:-3]
    execute('set keywordprg='.'pydoc'.res)
endfunction
3. Я делаю так: ibuffer, выбираю compilation, потом C-x k. Но чувствую, что я делаю неправильно


