私は小さなpythonスクリプトに取り組んでいます。このスクリプトは、デバッグしてさらに開発するために頻繁に実行する必要があります。
Vim画面を分割して、キーストロークで一部の部分でスクリプトを実行できますか?
Vimは、emacsやkateのような組み込みシェルをサポートしていません(それを意味する場合)。 このスタックオーバーフローの質問 を参照してください。
David Spilletが正解です。GNU画面内でvimを実行できます。
$ screen vim foo.txt
しかし、それはリモートでターミナルのウィンドウマネージャに似たものを提供するだけです-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>
これは、シバン(#!
)最初の行。インタプリタを使用してファイルを実行するため、実行権限を持っている必要はありません。
*(画面には、出力からのコピーアンドペースト、非表示のウィンドウのアクティビティ/非アクティビティの監視、異なる端末からのセッションを同時に使用できる、すべてのプログラムを残してログアウトできるなど、他の非常に優れた機能がいくつかあります実行中-それは強力なツールです)。
最も冗長でない方法(スクリプトが実行可能である必要があります)は、おそらく次のとおりです。
:!%
Bexec vimプラグインは、まさにあなたが望んでいることをします。キーボードショートカットが含まれています。
分割画面ではないかもしれませんが、これは私にとってはかなりうまく機能します:
map ;e :w<CR>:exe ":!python " . getreg("%") . "" <CR>
これは;e
現在のファイルを書き出し、pythonを使用して実行します(pythonがPATH
にあることを前提としています)。
同様のStackOverflow質問 があります。
この小さなスニペット を.vimrcに入れて、現在のファイルを1回のキーストローク(F5
など)で実行し、結果を新しい分割ペインバッファーに表示します。
:!
は問題ありませんが、結果を確認するには端末に切り替える必要があります。
ctrl-z
でそれを行い、fg
でvimを戻すことはできますが、それでもコンテキストを何度も切り替える必要があることを意味します。
この スニペット が機能する方法は、最初に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
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR>
私が一緒に使用したものです(F5は現在のスクリプトを実行します)。
Vimを強力なpython IDEに変えるには、このチュートリアルをお勧めします: