从Vim中的脚本执行选择

时间:2016-10-27 16:20:48

标签: vim

我试图将vim纳入我的主要工作流程。对我来说,一个主要的关键点是交互式编辑和运行程序/脚本。

例如,鉴于我目前已修改为test.py

print('hello')
x = 5
y = x+2
print(y)

如果不离开vim,我将如何:
a)运行整个脚本而不离开vim
b)运行" print(' hello')"

3 个答案:

答案 0 :(得分:38)

评论者和其他答案指出了如何从vim运行文件。但他们掩盖了一些非常强大的可能性。我想解释其中一些如何更详细地工作。

在vim中运行python脚本的最简单方法是在文件上调用python解释器,例如

:!python %

或者,我希望确保没有未保存的更改,

:w | !python %

但是甚至没有必要让文件在vim中运行python脚本。原因是因为 :w!= save! :w表示,如果没有提供参数,则会发生写入文件你正在编辑。但是,您可以到STDOUT,到另一个文件,甚至到另一个程序。因此,如果您希望将缓冲区作为python代码运行而无需保存和运行文件,则可以执行以下操作:

:w !python

这意味着将当前缓冲区写入外部程序" python"。这实际上只是将缓冲区的内容直接发送到python。

现在,它变得非常酷。在vim中,:w是" ex命令",例如从最初来自ex的vim命令行运行的命令,这是一个非常旧的基于行的unix文本编辑器。关于ex命令的令人敬畏的事情是,由于它们都是基于行的,因此您可以直接说明要将命令应用于哪些行。例如:

:2w myfile.txt

仅将第二行写入文件" myfile.txt"。你甚至可以提供一个范围,例如

:2,7w myfile.txt

将第2-7行写入" myfile.txt"。这意味着使用您的示例,我们可以运行

:1w !python

运行

print('hello')

为了使这更方便,您可以使用视觉模式选择您想要运行的每一行,这将自动为您填写正确的范围。这看起来像

:'<,'>w !python

为了使这更方便,我建议添加类似

的内容
xnoremap <leader>p :w !python<cr>

.vimrc。然后,您可以通过键入

直观地选择所需的任何内容并将其作为python代码运行
\p

(将\替换为您设置为领导者的任何内容)。你也可以这样做

nnoremap <leader>p :w !python<cr>

nnoremap <leader>p :w | !python %<cr>

取决于您是否要保存到文件。

答案 1 :(得分:2)

您可以使用:!从vim运行程序,即:!python3 %来运行您当前的脚本。

如果要将密钥绑定到它,另一种简单的方法是将makeprg设置为python可执行文件::set makeprg=python3,然后将密钥绑定到:make<cr>。在这种情况下,我会设置autocmds,根据文件类型切换makeprg

如果你想运行一个简单的语句,你可以使用Python的-c开关:

:!python3 -c 'print("Hello world")',或者您可以在没有参数的情况下运行:!python3而不会离开Vim。

答案 2 :(得分:2)

this问题:

中讨论的范围创建函数
fu PyRun() range
  echo system('python -c ' . shellescape(join(getline(a:firstline, a:lastline), "\n")))
endf

为可视模式创建映射:

vmap <C-F6> :call PyRun()<CR>

然后您可以选择一个范围并按 Control - F6 。行的范围将由python执行。结果将显示在命令区域中。