我试图将vim纳入我的主要工作流程。对我来说,一个主要的关键点是交互式编辑和运行程序/脚本。
例如,鉴于我目前已修改为test.py
print('hello')
x = 5
y = x+2
print(y)
如果不离开vim,我将如何:
a)运行整个脚本而不离开vim
b)运行" print(' hello')"
答案 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
。然后,您可以通过键入
\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
执行。结果将显示在命令区域中。