给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
干杯,