我正在研究一个小型python脚本,该脚本需要频繁执行才能进行调试和进一步开发。
我可以分割vim屏幕并通过按键在一部分上执行脚本吗?
我正在研究一个小型python脚本,该脚本需要频繁执行才能进行调试和进一步开发。
我可以分割vim屏幕并通过按键在一部分上执行脚本吗?
Answers:
Vim不会,并且永远不会支持emacs或kate之类的嵌入式外壳程序(如果您要那样做的话),请参见以下stackoverflow问题。
David Spillet是正确的,您可以在gnu屏幕中运行vim:
$ screen vim foo.txt
但这只会给您带来远程类似于终端机中的windowmanager的功能-在ssh或没有X的盒子上使用时非常有用,但是在本地您也可以打开另一个xterm并在它们之间切换。
无论如何,如果您可以忍受一个事实,即在查看文件生成的输出时看不到正在编辑的文件,那么Jack M的技巧很好,但可以更短:
:map ;e :w<cr>:!python %<cr>
出于相同的目的,我将其包含在~/.vimrc
:
au BufEnter *
\if match( getline(1) , '^\#!') == 0 |
\ execute("let b:interpreter = getline(1)[2:]") |
\endif
fun! CallInterpreter()
if exists("b:interpreter")
exec ("!".b:interpreter." %")
endif
endfun
map <F5> :call CallInterpreter()<CR>
这将运行#!
第一行上带有shebang()的任何文件。它使用解释器来运行文件,因此它不需要具有执行权限。
*(屏幕还具有其他一些非常简洁的功能,例如从输出中进行复制和粘贴,监视隐藏的窗口是否处于活动状态,能够同时使用来自不同终端的会话,能够退出并退出所有程序运行-这是一个功能强大的工具)。
:map ;e :w<cr>:!python %<cr>
想要回显我的vim缓冲区中的内容以“确认”(?)命令已运行。我如何获得它以简单方式静默执行命令?:map <silent> ...
似乎不起作用。
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR>
这是我使用的(F5运行当前脚本)。
为了将vim变成功能强大的python IDE,我推荐本教程:
把这个小片段在.vimrc一个按键(如执行当前文件F5
),并显示结果在一个新的拆分窗格缓冲。
:!
可以,但是您需要切换到终端以查看结果。
尽管可以做到这一点ctrl-z
并带回vim,fg
但这仍然意味着您需要大量切换上下文。
此代码段的工作方式是,首先基于来猜测可执行文件filetype
,然后以当前文件作为参数运行该可执行文件。
接下来,一个方便的实用程序方法获取输出并将其转储到新缓冲区中。
它不是完美的,但对于常见的工作流程来说确实非常快。
以下是复制的片段:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""" RUN CURRENT FILE """""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Execute current file
nnoremap <F5> :call ExecuteFile()<CR>
" Will attempt to execute the current file based on the `&filetype`
" You need to manually map the filetypes you use most commonly to the
" correct shell command.
function! ExecuteFile()
let filetype_to_command = {
\ 'javascript': 'node',
\ 'coffee': 'coffee',
\ 'python': 'python',
\ 'html': 'open',
\ 'sh': 'sh'
\ }
let cmd = get(filetype_to_command, &filetype, &filetype)
call RunShellCommand(cmd." %s")
endfunction
" Enter any shell command and have the output appear in a new buffer
" For example, to word count the current file:
"
" :Shell wc %s
"
" Thanks to: http://vim.wikia.com/wiki/Display_output_of_shell_commands_in_new_window
command! -complete=shellcmd -nargs=+ Shell call RunShellCommand(<q-args>)
function! RunShellCommand(cmdline)
echo a:cmdline
let expanded_cmdline = a:cmdline
for part in split(a:cmdline, ' ')
if part[0] =~ '\v[%#<]'
let expanded_part = fnameescape(expand(part))
let expanded_cmdline = substitute(expanded_cmdline, part, expanded_part, '')
endif
endfor
botright new
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
call setline(1, 'You entered: ' . a:cmdline)
call setline(2, 'Expanded Form: ' .expanded_cmdline)
call setline(3,substitute(getline(2),'.','=','g'))
execute '$read !'. expanded_cmdline
setlocal nomodifiable
1
endfunction
我不直接了解vim,但是您通常可以使用screen
实用程序以这种方式拆分屏幕。ctrl+ a,S(注意,是大写的S)将分割显示,你可以在这两个具有之间进行切换ctrl+ a,tab(如果窗口是空的,用ctrl+ a,n移动到另一个打开的窗口或ctrl+ a,c创建一个新的) 。
您也可以将显示分割成两个以上,并使用ctrl-a,:resize更改分割的大小。我经常以这种方式使用屏幕,尽管它不是您所要求的单键解决方案,但却非常方便。