在Vim中运行Python代码

我正在使用Vim编写Python代码,每次我想运行我的代码时,都在Vim中input:

:w !python 

这让人感到沮丧,所以我正在寻找一种在Vim中运行Python代码的更快速的方法。 从terminal执行Python脚本可能? 我正在使用Linux。

如何添加一个autocmd ,当FileType python ,创build一个映射:

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

那么你可以按<F9>来用python执行当前的缓冲区

我有这个在我的.vimrc文件中:

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

当我完成编辑Python脚本时,只需按<F5> 。 脚本被保存,然后在黑屏中执行。

我更喜欢将Python输出redirect到一个新的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> :<Cu>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 

请记住,您可以使用@:来重复上次使用的命令,所以您需要重复的是这两个字符。

或者你可以将stringw !python保存到一个寄存器中(例如"a ),然后点击:<CR>a<CR>将寄存器a的内容插入命令行并运行。

或者你可以做我所做的事情,并将<leader>z映射到:!python %<CR>来运行当前文件。

如果你不想看到每一次打印“ :exec python file.py ”,使用这个:

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

它也没有搞乱我的powerline / vim-airline状态栏。

一个简单的方法是在正常模式下键入:然后按键盘上的向上箭头键,然后按Enter键。 这将在VIM上重复上次input的命令。

如果你想快速跳回你的:w命令,一个很酷的事情是input:w ,然后按向上的箭头。 它只会循环以w开头的命令。

对于通用的(基于filetype从vim运行python / haskell / ruby​​ / C ++ …),有一个很好的插件叫做vim-quickrun 。 它默认支持许多编程语言。 它也很容易configuration,所以如果需要的话,可以为任何文件types定义首选行为。 github repo没有花哨的自述文件,但是doc文件很好地logging了它。

这个.vimrc映射需要Conque Shell ,但它复制了Geany(和其他X编辑器)的行为:

  • 按一个键执行
  • 在gnome-terminal中执行
  • 等待确认退出
  • 窗口在退出时自动closures

    :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; \" "')

我有这个在我的.vimrc:

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

它保存当前的缓冲区并只执行Esc + F9来执行代码

把你的光标放在代码的某处。 右键单击并select“select”选项之一来突出显示您的代码。 然后按下Ctrl键,你会看到新的提示'<,>'

现在input!python,看看是否有效。

我只是花了好几天的时间想弄清楚同样的问题! 我使用的编码:

 s='My name' print (s) 

当我拔出所有头发后,我终于明白了!