133

I am writing Python code using Vim, and every time I want to run my code, I type this inside Vim:

:w !python

This gets frustrating, so I was looking for a quicker method to run Python code inside Vim. Executing Python scripts from a terminal maybe? I am using Linux.

4

24 回答 24

195

如何将一个添加autocmd到您的~/.vimrc-file,创建一个映射:

autocmd FileType python map <buffer> <F9> :w<CR>:exec '!python3' shellescape(@%, 1)<CR>
autocmd FileType python imap <buffer> <F9> <esc>:w<CR>:exec '!python3' shellescape(@%, 1)<CR>

然后你可以按<F9>下来执行当前缓冲区python

解释:

  • autocmd: Vim 将自动执行的命令{event}(这里:如果你打开一个 python 文件)
  • [i]map<F9>:在插入/正常模式下创建键盘快捷键
  • <buffer>:如果打开了多个缓冲区/文件:只使用活动的
  • <esc>: 离开插入模式
  • :w<CR>: 保存你的文件
  • !: 在你的 shell 中运行以下命令 (try :!ls)
  • %: 替换为活动缓冲区的文件名。由于它可以包含空格和其他“坏”的东西,最好不要写:python %,而是使用:
  • shellescape: 转义特殊字符。1带反斜杠的方法

TL;DR:第一行将在正常模式下工作,一旦按下<F9>它,首先保存文件,然后使用 python 运行文件。第二个做同样的事情,但首先离开插入模式

于 2013-09-22T20:38:49.633 回答
57

<esc>只需按下并键入即可进入正常模式:

! clear; python %

在此处输入图像描述

分步说明:

!允许您运行终端命令

clear将清空您的终端屏幕

;结束第一个命令,允许您引入第二个命令

python将使用 python 来运行你的脚本(它可以被替换 ruby为例如)

%连接当前文件名,将其作为参数传递给 python命令

于 2018-09-05T13:22:25.897 回答
34

我的 .vimrc 文件中有这个:

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

编辑完 Python 脚本后,我只需按<F5>. 脚本被保存,然后在空白屏幕中执行。

于 2014-07-30T13:55:32.503 回答
16

在前面的答案的基础上,如果您想在查看其输出的同时查看代码,您会发现:ter( :terminal) 命令很有用。

autocmd Filetype python nnoremap <buffer> <F5> :w<CR>:ter python2 "%"<CR>
autocmd Filetype python nnoremap <buffer> <F6> :w<CR>:vert ter python3 "%"<CR>

vert在第二行中使用以垂直拆分而不是水平拆分运行代码。

不利的是,如果您不关闭运行代码的拆分窗口,您将在多次运行后进行多次拆分(这在重复使用相同输出窗口的原始 python IDLE 中不会发生)。

(我把这些线放在里面/home/user/.vimrc

于 2018-11-27T02:21:02.103 回答
8

插件:jupyter-vim

所以你可以发送行(<leader>E),视觉选择(<leader>e)到运行jupyter-client(替换ipython

在此处输入图像描述

我更喜欢分开编辑器和解释器(每个都在它的 shell 中)。想象一下,您发送了一个错误的输入读取命令......

于 2020-01-03T04:15:06.307 回答
7

请记住,您可以使用 重复上次使用的命令@:,因此您只需要重复这两个字符即可。

或者您可以将字符串保存w !python到其中一个寄存器中("a例如),然后点击:<C-R>a<CR>将寄存器的内容插入a命令行并运行它。

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

于 2013-09-22T21:09:31.537 回答
5

如果您不想:exec python file.py每次都看到 " " 打印,请使用以下命令:

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

它也没有弄乱我的电力线/ vim-airline 状态栏。

于 2016-05-17T20:29:04.193 回答
3

对于一般用途(从基于 的 vim 运行 python/haskell/ruby/C++... filetype),有一个不错的插件叫做vim-quickrun。它默认支持多种编程语言。它也很容易配置,因此可以根据需要为任何文件类型定义首选行为。github repo 没有花哨的自述文件,但它在 doc 文件中有很好的记录。

于 2015-01-28T14:13:42.467 回答
3

考虑使用 shebang line,这样你就可以使用任何语言,而不仅仅是 Python。

添加shebang:

将此添加到脚本的第一行:

#!/usr/bin/env python3

或者这个,如果你使用的是 Python 2:

#!/usr/bin/env python2

Vim 键盘映射:

将此添加到您的~/.vimrc

nmap <F7> :w<cr>:!clear;"%:p"<cr>

使文件可执行:

输入 Vim:

:!chmod +x %

或在终端:

chmod +x script_name.py

解释:

在普通模式下按 F7 时,Vim 会尝试将当前文件作为 bash 脚本执行。然后 bash 解释器将看到 shebang 行并理解该文件应该传递给 Python(或任何其他程序,如果需要)。

您还可以使用它的名称从终端运行您的脚本:

./script_name.py

而不是这种方式(这也可以):

python3 script_name.py
于 2020-01-03T22:47:51.047 回答
3

我的 .vimrc 上有这个:

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

它保存当前缓冲区并仅按 Esc + F9 执行代码

于 2015-12-08T13:39:57.190 回答
3

我用

:! [filename.py]; python %

这对我有用

于 2020-10-18T09:53:33.223 回答
3

接受的答案对我有用(在 Linux 上),但我希望这个命令在运行之前也保存缓冲区,所以我稍微修改了它:

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

:w <bar>保存缓冲区然后运行其中的代码。

于 2019-08-08T17:30:06.357 回答
2
  1. 转到您的主目录。cd
  2. 用 vim 打开你的 .vimrc 文件。vim .vimrc
  3. 将下一个代码添加到文件中。nmap <F4> <Esc>:w<CR>:!clear;python %<CR>
  4. 保存并退出。ZZ

下次要运行代码时,只需按F4“正常模式”即可。如果要在“插入模式”下运行代码,请替换nmapimap.

于 2020-12-12T15:16:08.070 回答
2

你也可以使用skywind3000/asyncrun.vim。它类似于@FocusedWolf 列出的内容。

于 2019-07-07T16:54:20.610 回答
1

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

现在输入 !python 看看是否可行。

我只是花了几天时间试图找出同样的问题!!!我使用了编码:

s='My name'
print (s) 

在我把头发都拔了之后,我终于把它弄对了!

于 2014-08-11T21:50:42.387 回答
1

如果您想快速跳回您的:w命令,一个很酷的方法是键入:w然后按向上箭头。它只会循环执行以 . 开头的命令w

于 2014-03-19T19:56:16.720 回答
1

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

于 2014-02-17T10:11:04.177 回答
1

不要将命令映射放在您的 中.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>
于 2018-01-01T17:51:40.087 回答
1

您可以使用 augroup 命令扩展任何具有 1 个键绑定的语言,例如:

augroup rungroup
    autocmd!
    autocmd BufRead,BufNewFile *.go nnoremap <F5> :exec '!go run' shellescape(@%, 1)<cr>
    autocmd BufRead,BufNewFile *.py nnoremap <F5> :exec '!python' shellescape(@%, 1)<cr>
augroup END

于 2019-12-14T03:45:17.080 回答
1

我建议使用 Vim-Slime 插件“按块”将 python 代码从 vim 发送到 python 控制台。

https://github.com/jpalardy/vim-slime

于 2021-10-04T23:15:22.057 回答
1

您是否尝试过仅使用:

:!python nameofyourfile.py

示例:https ://www.youtube.com/watch?v=mjUxEX4OssM

这可能只是您的语法,也可能是您缺少其他人使用的插件或软件包。您是在使用普通终端,还是使用其他类似 MobaXterm 的终端?上面的代码适用于在 vim 中使用终端运行 python 脚本(输出将显示在 vim 会话中)。

于 2021-03-23T15:50:43.670 回答
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; \" "')

于 2014-09-24T12:43:31.763 回答
0
" run current python file to new buffer
function! RunPython()
    let s:current_file = expand("%")
    enew|silent execute ".!python " . shellescape(s:current_file, 1)
    setlocal buftype=nofile bufhidden=wipe noswapfile nowrap
    setlocal nobuflisted
endfunction
autocmd FileType python nnoremap <Leader>c :call RunPython()<CR>
于 2019-10-19T15:13:46.857 回答
0

我用这个。它会自动保存程序并将其运行到 shell 中。程序运行后返回 vim。

通过在 vim 中按下<F5>插入模式来工作。在您的 vimrc 文件中添加以下代码片段。

imap <F5> <Esc>:w<CR>:!python % [filename.py]; <CR>

我刚刚结合了之前为这个问题提供的两种解决方案,它对我有用。

谢谢!

于 2022-02-17T02:50:32.827 回答