给Vim添加一个命令

我终于决定尝试Vim ,因为我越来越受到GUI编辑的沮丧。 到目前为止,我很喜欢它,但是对于我遇到的问题,我找不到任何帮助。

我正在尝试使用cmap将命令:Pyrun:!python % in Vim。 如果我input:cmap ,映射显示得很好。 但是,input:Pyrun ,我得到这个错误信息:

不是编辑命令:Pyrun。

这就是我在.vimrc中所要做的:

 :autocmd FileType python :cmap Pyrun<cr> !python %<cr> :autocmd FileType python :cmap Intpyrun<cr> !python -i %<cr> 

我能做些什么来解决这个问题?

我会在.vimrc或者ftplugin / python_ft.vim中尝试类似的东西

 command Pyrun execute "!python %" command Intpyrun execute "!python -i %" 

那么:Pyrun:Intpyrun应该工作

然后你可以映射一个function键到每个

 map <F5> :Pyrun<CR> map <F6> :Intpyrun<CR> 

我个人更喜欢另一种方法。 首先创build一个接收命令参数的函数,然后创build一个命令来调用函数:

 fun! DoSomething( arg ) "{{{ echo a:arg " Do something with your arg here endfunction "}}} command! -nargs=* Meh call DoSomething( '<args>' ) 

所以会是这样的

 fun! Pyrun( arg ) "{{{ execute '!python ' . expand( '%' ) endfunction "}}} command! -nargs=* Pyrun call Pyrun( '<args>' ) 

但是,在Vim中有更好的方法。 使用makeprg:

 makeprg=python\ % 

只需input:make来运行你当前的Python文件。 使用:copen显示错误列表。

天儿真好,

类似于karoberts的回答,我更喜欢更直接的:

 :map <F9> :!python %<CR> 

如果我的脚本正在创build一些输出,我也想将其捕获到一个临时文件中,然后自动将这些文件内容复制到另一个缓冲区中,例如

 :map <F9> :!python % 2>&1 \| tee /tmp/results 

然后通过input:set autoread并在另一个缓冲区中打开结果文件来:set autoread

 :split /tmp/results<CR> 

然后,通过运行正在开发的脚本,更新结果文件时,可以轻松地看到在自动刷新的缓冲区中运行的结果。

HTH

干杯,