我正在尝试将vim纳入我的主要工作流程.对我来说,一个主要的关键点是交互式编辑和运行程序/脚本.
例如,鉴于我目前已进入test.py
print('hello')
x = 5
y = x+2
print(y)
Run Code Online (Sandbox Code Playgroud)
如果不离开vim,我将如何:
a)运行整个脚本而不离开vim
b)运行"print('hello')"
DJM*_*hem 44
评论者和其他答案指出了如何从vim运行文件.但他们掩盖了一些非常强大的可能性.我想解释其中一些如何更详细地工作.
在vim中运行python脚本的最简单方法是在文件上调用python解释器,例如
:!python %
Run Code Online (Sandbox Code Playgroud)
或者,我更喜欢确保没有未保存的更改,
:w | !python %
Run Code Online (Sandbox Code Playgroud)
但是甚至没有必要让文件在vim中运行python脚本.原因是因为:w!=保存! :w表示写入,如果没有提供参数,则会写入您正在编辑的文件.但是,您可以写入 STDOUT,写入另一个文件,甚至写入另一个程序.因此,如果您希望将缓冲区作为python代码运行,而无需保存和运行文件,则可以执行以下操作:
:w !python
Run Code Online (Sandbox Code Playgroud)
这meanse 写入当前缓冲区到外部程序"蟒蛇".这实际上只是将缓冲区的内容直接发送到python.
现在这里变得非常酷.在vim中,:w是一个"ex命令",例如你从最初来自ex的vim命令行运行的命令,这是一个非常古老的基于行的unix文本编辑器.关于ex命令的令人敬畏的事情是,因为它们都是基于行的,所以您可以直接说明要将命令应用到哪些行.例如:
:2w myfile.txt
Run Code Online (Sandbox Code Playgroud)
将只将第二行写入文件"myfile.txt".你甚至可以提供一个范围,例如
:2,7w myfile.txt
Run Code Online (Sandbox Code Playgroud)
将第2-7行写入"myfile.txt".这意味着使用您的示例,我们可以运行
:1w !python
Run Code Online (Sandbox Code Playgroud)
运行刚
print('hello')
Run Code Online (Sandbox Code Playgroud)
为了使这更方便,您可以使用可视模式选择您想要运行的每一行,这将自动为您填写正确的范围.这看起来像
:'<,'>w !python
Run Code Online (Sandbox Code Playgroud)
为了使这更方便,我建议添加类似的东西
xnoremap <leader>p :w !python<cr>
Run Code Online (Sandbox Code Playgroud)
到你的.vimrc.然后你可以直观地选择你想要的任何东西,并通过输入运行它作为python代码
\p
Run Code Online (Sandbox Code Playgroud)
(替换\你设置为领导者的任何东西).你也可以这样做
nnoremap <leader>p :w !python<cr>
Run Code Online (Sandbox Code Playgroud)
要么
nnoremap <leader>p :w | !python %<cr>
Run Code Online (Sandbox Code Playgroud)
取决于您是否要保存到文件.
如本问题所述,为范围创建一个函数:
fu PyRun() range
echo system('python -c ' . shellescape(join(getline(a:firstline, a:lastline), "\n")))
endf
Run Code Online (Sandbox Code Playgroud)
创建视觉模式的映射:
vmap <C-F6> :call PyRun()<CR>
Run Code Online (Sandbox Code Playgroud)
然后您可以选择一个范围并按Control- F6。行的范围将由 执行python。结果将显示在命令区域中。