目前我主要使用Vim来编写Python代码,最近我发现了两种非常好的策略,可以在外部运行代码并将其带回到Vim中。第一种方法是使用一个名为Shell
的函数,这个函数可以在Vim页面找到:
function! s:ExecuteInShell(command)
let command = join(map(split(a:command), 'expand(v:val)'))
let winnr = bufwinnr('^' . command . '$')
silent! execute winnr < 0 ? 'botright new ' . fnameescape(command) : winnr . 'wincmd w'
setlocal buftype=nowrite bufhidden=wipe nobuflisted noswapfile nowrap number
echo 'Execute ' . command . '...'
silent! execute 'silent %!'. command
silent! execute 'resize ' . line('$')
silent! redraw
silent! execute 'au BufUnload <buffer> execute bufwinnr(' . bufnr('#') . ') . ''wincmd w'''
silent! execute 'nnoremap <silent> <buffer> <LocalLeader>r :call <SID>ExecuteInShell(''' . command . ''')<CR>'
echo 'Shell command ' . command . ' executed.'
endfunction
command! -complete=shellcmd -nargs=+ Shell call s:ExecuteInShell(<q-args>)
这个功能可以让你像这样运行:Shell nosetests
,并在一个新窗口中查看结果:
- 持久化(不需要“按回车键”使其消失)
- 使用临时缓冲区(而不是临时文件)
- 最重要的是,再次运行命令只需刷新当前窗口,而不是每次都打开新窗口。
然后我还使用这个小工具:
:'<,'>:w !python
我可以使用当前缓冲区的选择,但按下回车后就会消失。
我无法想出如何将两者结合起来。我想要的是:
Shell
命令的所有窗口属性,但是- 能够从屏幕上的选择运行它。
- 编辑:对于选定的Python代码执行此操作,而不是Bash代码。该函数已经执行常规shell命令。我想让它直接运行代码,就像
:'<,'>:w !python
一样。
我不了解足够的Vimscript来修改Shell
以包括选择,并且我无法弄清楚如何将:'<,'>:w !python
至少放入自己的窗口中,而不使用临时文件,这对我来说似乎是不必要的。有什么想法?提示?