TextMateには、現在のコンテキスト内からスクリプトを実行して、別のウィンドウに出力を表示できるニース機能があります。これにより、外出先でコードを記述してテストできます。 MacVim/gVIMに同様の機能があることはほぼ確実ですが、それが何であるかはわかりません。現在、バッファーをディスクに保存してから、コマンドラインに移動し、その点でスクリプトを実行しています。 vimでそのワークフローを改善するにはどうすればよいですか?
これはvimで!
コマンドを使用して実行できます。たとえば、現在のファイル内の単語の数を数えるには、次のようにします。
:! wc %
%は現在のファイル名に置き換えられます。スクリプトを実行するには、ファイルのインタープリターを呼び出すことができます-たとえば、Perlスクリプトを作成している場合:
:! Perl %
vimチュートリアル: Vimでのキーのマッピング
上記のjtsで提案されているように、Perlが現在のスクリプトを実行するようにキーをマップできます。
map <C-p> :w<CR>:!Perl %<CR>
ctrl + Pをマップしてファイルを書き込み、Perlで実行します
imap <C-p> <Esc>:w<CR>:!Perl %<CR>
挿入モードで同じものを呼び出すことができます。
Vim/homeフォルダーに.vimrc(Windowsの場合は_vimrc)ファイルが必要です。 vimの動作に関する指示があります。
map <C-p> :w<CR>:!Perl %<CR>
は、Ctrl + pを次のものにマッピングするための単なる命令です。
a)現在のファイルに書き込む:w
b)%(現在開いているファイル)をパラメーターとして使用してコマンド(Perl)を実行します:!Perl %
<CR>
各コマンドの後に「キャリッジリターン」の略:特定のコマンドを実行するための命令。 imapはmapと同じですが、挿入モードではCtrl + pをリッスンします。
Vimから直接実行できます。
:!./script.sh
ファイルを保存し、インタープリターを使用してスクリプトを呼び出します
例えば。:
:!python %
!
を探しているようです:
:!{cmd}
シェルで{cmd}
を実行します。
スクリプトに渡す必要がある場合は、%
を使用して現在のファイル名を示すことができます。
!proofread-script %
範囲で!
を使用して、コマンドをフィルターとして使用することもできます。
!{motion}{filter} " from normal mode
:{range}!{filter} " from command mode
(最初の場合、他の多くのコマンドと同様に、モーションを入力すると、コマンドモードに移行し、モーションを範囲に変換します(例::.,.+2!
)
そして最後に、ファイルから入力を実際に渡す必要はないが、ファイルに出力を必要とする場合、それは本質的に簡単なフィルターであり、それを行う最も速い方法は!!{cmd}
です。これにより、現在の行がコマンドの出力に置き換えられます。
.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
ここでのすべての提案は、単に:!{cmd} %
、現在のバッファをShell cmdに渡します。ただし、別のオプション:write !{cmd}
たとえば、:write !sh
コマンドは、現在のバッファーの各行がシェルで実行されることです。
たとえば、バッファーに2、3行追加して、最初にバッファーを保存せずにすぐに実行結果を確認したい場合に便利です。
バッファのコンテンツ全体ではなく、ある範囲を実行することも可能です。:[range]write !{cmd}
現在の実行可能スクリプトを実行するには、使用します
:!./%
!シェルコマンドを実行します。%は現在のファイル名で、。/は現在のディレクトリを前に追加します。
まあ、それはあなたのOSに依存します-実際に私はM $ Window $でそれをテストしませんでした-しかし、Conqueは周りの最高のプラグインの一つです: http://code.google.com/p/conque/ =
実際には、それは改善できますが、機能します。 vim「ウィンドウ」にシェルウィンドウを埋め込むことができます。