2013-09-22 5 views
59

Я пишу код Python с помощью Vim, и каждый раз, когда я хочу запустить свой код, я печатаю этот внутри Vim:Запуск кода Python в Vim

:w !python 

Это становится неприятно, поэтому я искал более быстрый метод для запуска кода Python внутри Vim. Возможно ли выполнить скрипты Python с терминала? Я использую Linux.

ответ

71

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

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

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

+5

Не могли бы вы расширить свой ответ и объяснить, где я должен добавить эту строку. Возможно, в файле конфигурации Vim? Я новичок. – multigoodverse

+4

@ArditSulce в вашем файле vimrc, добавьте строку: 'autocmd FileType python nnoremap ....' – Kent

+2

Если вы находитесь на os x (и я предполагаю unix), то «.vimrc» находится в домашнем каталоге. Вы можете проверить это, набрав ': version' в командном режиме, чтобы убедиться, что вы увидите строку под названием 'user vimrc file: "..."' – ThinkBonobo

3

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

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

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

0

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

+0

Вы можете выполнить инкрементный поиск, введя стартовые символы команды, прежде чем нажимать стрелку вверх. Если много команд назад я сделал! python%, я мог бы:! затем нажмите стрелку вверх, чтобы только циклически запускать команды, которые начинаются с! – Jared

0

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

15

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

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

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

+0

интересно! это работает на linux, но теперь в Windows :) – Yar

+0

Спасибо! Это работает очень хорошо. Интересно, как я могу установить ярлык на ключ 'm' плюс плюс, а не клавишу' F5'? –

+0

Я не вижу, как это сначала сохранить файл? –

-1

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

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

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

s='My name' 
print (s) 

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

+3

Использование мыши не в виде vim – 0xc0de

+0

Но можно сделать ':%! Python'. '%' просто означает все строки. –

0

Это.отображение vimrc нужно Conque Shell, но размножается Geany (и других редакторов X) поведение:

  • Нажмите клавишу, чтобы выполнить
  • Запускает в Gnome-терминал
  • Уэйтса для подтверждения для выхода
  • окно закрывается автоматически при выходе

    :let dummy = conque_term#subprocess('gnome-terminal -e "bash -c \"python ' . expand("%") . '; answer=\\\"z\\\"; while [ $answer != \\\"q\\\" ]; do printf \\\"\nexited with code $?, press (q) to quit: \\\"; read -n 1 answer; done; \" "')

0

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

0

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

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

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

1

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

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

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

7

Я предпочитаю вывод 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 
0

Вместо того, чтобы команды сопоставление в вашем .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> 
Смежные вопросы