向Vim添加命令

时间:2010-01-04 18:18:16

标签: vim

我最终决定尝试Vim,因为我越来越感到GUI编辑的沮丧。到目前为止,我很喜欢它,但我找不到任何有关我正在解决的问题的帮助......

我正在尝试使用:Pyrun将命令:!python %映射到Vim中的cmap。如果我键入:cmap,映射会显示正常。但是,在输入:Pyrun时,我收到以下错误消息:

  

不是编辑命令:Pyrun。

以下是我正在尝试的内容.vimrc:

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

我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:40)

我会在你的.vimrc或你的ftplugin / python_ft.vim中试试这样的东西

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

然后:Pyrun:Intpyrun应该有效

然后,您可以将功能键映射到每个

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

答案 1 :(得分:28)

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

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\ %

只需输入:make即可运行当前的Python文件。使用:copen显示错误列表。

答案 2 :(得分:10)

天儿真好,

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

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

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

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

然后我输入:set autoread并在另一个缓冲区中打开结果文件

来设置autoread
:split /tmp/results<CR>

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

HTH

欢呼声,