回答:
Vimはemacsやkateなどの組み込みシェルをサポートしておらず、サポートすることはありません(もしそうなら)、このstackoverflowの質問を参照してください。
David Spilletは正しい、あなたはgnu画面内でvimを実行できます:
$ screen vim foo.txt
しかし、それはターミナルのウィンドウマネージャーにリモートで似たものを提供するだけです-sshを介して、またはXのないボックスで使用すると非常に便利ですが、ローカルで別のxtermを開いてそれらを切り替えることができます。
とにかく、編集しているファイルが表示されないという事実に耐えることができるなら、出力を見て、ジャック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>
これ#!
により、最初の行にシバング()があるすべてのファイルが実行されます。インタープリターを使用してファイルを実行するため、実行権限は必要ありません。
*(画面には、出力からのコピーアンドペースト、アクティビティ/非アクティビティの非表示ウィンドウの監視、異なる端末からのセッションの同時使用、すべてのプログラムからのログアウトなどの非常に便利な機能があります実行中-それは強力なツールです)。
:map ;e :w<cr>:!python %<cr>
コマンドが実行されたことを「確認」(?)するために、vimバッファーに内容をエコーしたい。単純にコマンドをサイレントに実行するにはどうすればよいですか?:map <silent> ...
動作していないようです。
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR>
私が使ったものです(F5は現在のスクリプトを実行します)。
vimを強力なPython IDEに変えるには、このチュートリアルをお勧めします。
この小さなスニペットを.vimrcに入れて、1回のキーストローク(など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であるノートは、)ディスプレイを分割し、あなたが持つ2つの間で切り替えることができますctrl+ a、tab(ウィンドウが空の場合、使用ctrl+はa、n他の開いているウィンドウに移動するか、ctrl+ a、c新しいものを作成します) 。
表示を2つ以上に分割し、ctrl-a、:resizeで分割のサイズを変更することもできます。私はこの方法でスクリーンを頻繁に使用しますが、単一キーのソリューションではありませんが、非常に便利です。