我希望能够设置热键\\
,以便能够从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
时那样好。
有人知道怎么解决这个问题吗?
1条答案
按热度按时间yzuktlbb1#
Map的作用:
与手动操作不同:
如果您希望获得与手动方式相同的结果,则只需执行相同的操作:
是不必要的
&
导致了您的问题:它将命令发送到后台,Vim认为它完成了,并收回了对终端的控制。但是后台作业仍然将其输出打印到与Vim相同的终端上,结果会很混乱。删除那个&
将修复Map。顺便说一句,整个
command.vim
的事情是a)无用的,b)过于复杂,b)一个红鲱鱼。你应该从问题中删除它......从你的vimrc
。