Также, если вы используете сторонние библиотеки, убедитесь, что у вас есть правильные 32/64 битные файлы
как насчет добавления autocmd
, когда FileType python
создать сопоставление:
nnoremap <buffer> <F9> :exec '!python' shellescape(@%, 1)<cr>
, тогда вы можете нажать <F9>
, чтобы выполнить текущий буфер с помощью python
У меня это в файле .vimrc:
imap <F5> <Esc>:w<CR>:!clear;python %<CR>
Когда я закончил редактирование скрипта Python, я просто нажимаю <F5>
. Сценарий сохраняется, а затем выполняется на пустом экране.
У меня есть это на моем .vimrc:
"map <F9> :w<CR>:!python %<CR>"
, который сохраняет текущий буфер и выполняет код с использованием только Esc + F9
Я предпочитаю выход Python перенаправляться в новое окно Vim (и если это окно остается открытым, а затем обновлять его содержимое при следующем запуске кода Python с помощью этой функции):
" Bind F5 to save file if modified and execute python script in a buffer.
nnoremap <silent> <F5> :call SaveAndExecutePython()<CR>
vnoremap <silent> <F5> :<C-u>call SaveAndExecutePython()<CR>
function! SaveAndExecutePython()
" SOURCE [reusable window]: https://github.com/fatih/vim-go/blob/master/autoload/go/ui.vim
" save and reload current file
silent execute "update | edit"
" get file path of current file
let s:current_buffer_file_path = expand("%")
let s:output_buffer_name = "Python"
let s:output_buffer_filetype = "output"
" reuse existing buffer window if it exists otherwise create a new one
if !exists("s:buf_nr") || !bufexists(s:buf_nr)
silent execute 'botright new ' . s:output_buffer_name
let s:buf_nr = bufnr('%')
elseif bufwinnr(s:buf_nr) == -1
silent execute 'botright new'
silent execute s:buf_nr . 'buffer'
elseif bufwinnr(s:buf_nr) != bufwinnr('%')
silent execute bufwinnr(s:buf_nr) . 'wincmd w'
endif
silent execute "setlocal filetype=" . s:output_buffer_filetype
setlocal bufhidden=delete
setlocal buftype=nofile
setlocal noswapfile
setlocal nobuflisted
setlocal winfixheight
setlocal cursorline " make it easy to distinguish
setlocal nonumber
setlocal norelativenumber
setlocal showbreak=""
" clear the buffer
setlocal noreadonly
setlocal modifiable
%delete _
" add the console output
silent execute ".!python " . shellescape(s:current_buffer_file_path, 1)
" resize window to content length
" Note: This is annoying because if you print a lot of lines then your code buffer is forced to a height of one line every time you run this function.
" However without this line the buffer starts off as a default size and if you resize the buffer then it keeps that custom size after repeated runs of this function.
" But if you close the output buffer then it returns to using the default size when its recreated
"execute 'resize' . line('$')
" make the buffer non modifiable
setlocal readonly
setlocal nomodifiable
endfunction
Если вы не хотите каждый раз печатать «:exec python file.py
», используйте это:
nnoremap <F9> :echo system('python2 "' . expand('%') . '"')<cr>
nnoremap <F10> :echo system('python3 "' . expand('%') . '"')<cr>
Это не испортило мою строку состояния powerline / vim-авиакомпании.
Если вы хотите быстро перепрыгнуть через свои команды :w
, то классно набрать :w
, а затем нажать стрелку вверх. Он будет работать только через команды, начинающиеся с w
.
Вместо размещения сопоставления команд в вашем .vimrc
, поместите сопоставление в ваш файл ~/.vim/ftplugin/python.vim
(Windows $HOME\vimfiles\ftplugin\python.vim
). Если у вас нет этого файла или каталогов, просто сделайте их. Таким образом, ключ отображается только при открытии файла .py
или любого файла с помощью filetype=python
, так как вы будете использовать эту команду только для скриптов Python.
Для фактического сопоставления мне нравится чтобы иметь возможность редактировать в Vim во время выполнения скрипта. Отправляясь от ответа @cazyas, у меня есть следующее в моей ftplugin\python.vim
(Windows):
noremap <F5> <Esc>:w<CR>:!START /B python %<CR>
Это запустит текущий сценарий Python в фоновом режиме. Для Linux просто измените его на это:
noremap <F5> <Esc>:w<CR>:!python % &<CR>
Простым методом было бы ввести :
в нормальном режиме, а затем нажать клавишу со стрелкой вверх на клавиатуре и нажать Enter. Это повторит последние введенные команды на VIM.
Поместите курсор в код где-нибудь. Щелкните правой кнопкой мыши и выберите один из вариантов «Выбрать», чтобы выделить код. Затем нажмите Ctrl: и вы увидите новое приглашение '& lt ;,>'
Теперь введите! Python и посмотрите, работает ли это.
Я просто трачу дни, пытаясь выяснить та же проблема!!! Я использовал кодировку:
s='My name'
print (s)
После того, как я вытащил все мои волосы, я, наконец, понял все!
Имейте в виду, что вы можете повторить последнюю использованную команду с @:
, так что это все, что вам нужно будет повторить, это эти два символа.
Или вы можете сохранить строку w !python
в одном из регистров (например, "a
), а затем нажать :<C-R>a<CR>
, чтобы вставить содержимое регистра a
в командную строку и запустить ее ,
Или вы можете делать то, что я делаю, и сопоставлять <leader>z
с :!python %<CR>
для запуска текущего файла.
Для общего использования (запустите python / haskell / ruby / C ++ ... из vim на основе filetype
), есть хороший плагин с именем vim-quickrun . По умолчанию он поддерживает многие языки программирования. Он также легко настраивается, поэтому при необходимости можно определить предпочтительные типы поведения для любого типа файла. Репозиторий github не имеет причудливого readme, но он хорошо документирован с файлом doc.