直接从VIM运行Python代码时出现小问题

pod7payv  于 2022-11-11  发布在  Python
关注(0)|答案(1)|浏览(143)

我希望能够设置热键\\,以便能够从VIM编写和运行python脚本,而无需每次都键入

:w
:! python3 file.py

到目前为止,我所做的是将以下内容粘贴到vimrc文件中:

"{{{ The following is for sourcing command.vim whenever exists.
" Function to source only if the file command.vim exists
" https://devel.tech/snippets/n/vIIMz8vZ/load-vim-source-files-only-if-they-exist
"
function! SourceIfExists(file)
  if filereadable(expand(a:file))
    echom a:file . " is about to be sourced."
    exe 'source' a:file
  endif
endfunction
autocmd BufEnter * call SourceIfExists("command.vim")
" }}}

然后在python文件所在的目录中,创建一个名为command.vim的文件,并将以下代码粘贴到该文件中:

noremap <leader><leader> :w <cr> :!python3 % &<cr>

现在,除了下面的问题之外,这几乎可以完美地工作file.py:

import numpy as np

x = np.linspace(0, 5, 6)
y = np.linspace(6, 10, 5)

print('{}\n{}'.format(x, y))

如果我使用:! python3 file.py以标准方式运行此命令,则输出如下:

[0. 1. 2. 3. 4. 5.]
[ 6.  7.  8.  9. 10.]

Press ENTER or type command to continue

但是,如果我使用\\方法运行同一脚本,则会得到以下输出:

Press ENTER or type command to continue[0. 1. 2. 3. 4. 5.]
                                                          [ 6.  7.  8.  9. 10.]

您可以看到使用\\的脚本的输出格式不像使用标准命令:! python3 file.py时那样好。
有人知道怎么解决这个问题吗?

yzuktlbb

yzuktlbb1#

Map的作用:

:w
:!python3 % &

与手动操作不同:

:w
:!python3 file.py

如果您希望获得与手动方式相同的结果,则只需执行相同的操作:

nnoremap <leader><leader> :w<cr>:!python3 %<cr>

是不必要的&导致了您的问题:它将命令发送到后台,Vim认为它完成了,并收回了对终端的控制。但是后台作业仍然将其输出打印到与Vim相同的终端上,结果会很混乱。删除那个&将修复Map。
顺便说一句,整个command.vim的事情是a)无用的,b)过于复杂,b)一个红鲱鱼。你应该从问题中删除它......从你的vimrc

相关问题