Как запустить текущий скрипт python (передний буфер) в командном окне Vim? [Дубликат]

Также, если вы используете сторонние библиотеки, убедитесь, что у вас есть правильные 32/64 битные файлы

65
задан multigoodverse 17 February 2014 в 12:07
поделиться

11 ответов

как насчет добавления autocmd, когда FileType python создать сопоставление:

nnoremap <buffer> <F9> :exec '!python' shellescape(@%, 1)<cr>

, тогда вы можете нажать <F9>, чтобы выполнить текущий буфер с помощью python

85
ответ дан Kent 23 August 2018 в 23:05
поделиться

У меня это в файле .vimrc:

imap <F5> <Esc>:w<CR>:!clear;python %<CR>

Когда я закончил редактирование скрипта Python, я просто нажимаю <F5>. Сценарий сохраняется, а затем выполняется на пустом экране.

20
ответ дан czayas 23 August 2018 в 23:05
поделиться

У меня есть это на моем .vimrc:

"map <F9> :w<CR>:!python %<CR>"

, который сохраняет текущий буфер и выполняет код с использованием только Esc + F9

1
ответ дан derwin 23 August 2018 в 23:05
поделиться

Я предпочитаю выход 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
8
ответ дан FocusedWolf 23 August 2018 в 23:05
поделиться

Если вы не хотите каждый раз печатать «:exec python file.py», используйте это:

nnoremap <F9> :echo system('python2 "' . expand('%') . '"')<cr>
nnoremap <F10> :echo system('python3 "' . expand('%') . '"')<cr>

Это не испортило мою строку состояния powerline / vim-авиакомпании.

2
ответ дан Jabba 23 August 2018 в 23:05
поделиться

Если вы хотите быстро перепрыгнуть через свои команды :w, то классно набрать :w, а затем нажать стрелку вверх. Он будет работать только через команды, начинающиеся с w.

1
ответ дан Jared 23 August 2018 в 23:05
поделиться

Вместо размещения сопоставления команд в вашем .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>
0
ответ дан jpyams 23 August 2018 в 23:05
поделиться

Простым методом было бы ввести : в нормальном режиме, а затем нажать клавишу со стрелкой вверх на клавиатуре и нажать Enter. Это повторит последние введенные команды на VIM.

0
ответ дан multigoodverse 23 August 2018 в 23:05
поделиться

Поместите курсор в код где-нибудь. Щелкните правой кнопкой мыши и выберите один из вариантов «Выбрать», чтобы выделить код. Затем нажмите Ctrl: и вы увидите новое приглашение '& lt ;,>'

Теперь введите! Python и посмотрите, работает ли это.

Я просто трачу дни, пытаясь выяснить та же проблема!!! Я использовал кодировку:

s='My name'
print (s) 

После того, как я вытащил все мои волосы, я, наконец, понял все!

0
ответ дан Steen 23 August 2018 в 23:05
поделиться

Имейте в виду, что вы можете повторить последнюю использованную команду с @:, так что это все, что вам нужно будет повторить, это эти два символа.

Или вы можете сохранить строку w !python в одном из регистров (например, "a), а затем нажать :<C-R>a<CR>, чтобы вставить содержимое регистра a в командную строку и запустить ее ,

Или вы можете делать то, что я делаю, и сопоставлять <leader>z с :!python %<CR> для запуска текущего файла.

4
ответ дан TankorSmash 23 August 2018 в 23:05
поделиться

Для общего использования (запустите python / haskell / ruby ​​/ C ++ ... из vim на основе filetype), есть хороший плагин с именем vim-quickrun . По умолчанию он поддерживает многие языки программирования. Он также легко настраивается, поэтому при необходимости можно определить предпочтительные типы поведения для любого типа файла. Репозиторий github не имеет причудливого readme, но он хорошо документирован с файлом doc.

0
ответ дан Yosh 23 August 2018 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: