質問
多くのPythonクイックシミュレーションを行い、常に保存(:w)してから実行しています(:!!)。これらのアクションを組み合わせる方法はありますか?おそらく<!> quot; save and run <!> quot;コマンド。
ご協力ありがとうございます。
解決
オプション1:
これに似た関数を作成し、スタートアップ設定に配置します:
function myex()
execute ':w'
execute ':!!'
endfunction
キーコンボをマッピングすることもできます。ドキュメントをご覧ください。
オプション2(改善):
キーストロークの再マッピングについては、ドキュメントをご覧ください-簡単なキーの再マップでそれを実現できる場合があります。以下は動作しますが、<!> quot; filename.py <!> quot;ハードコーディング。おそらく、それを掘り下げて、それを現在のファイルに置き換える方法を見つけることができますか?
:map <F2> <Esc>:w<CR>:!filename.py<CR>
それをマッピングしたら、コマンドモードでF2を押すだけです。
imap、vmapなどは、異なるモードのマッピングです。上記はコマンドモードにのみ適用されます。以下は挿入モードでも動作するはずです:
:imap <F2> <Esc>:w<CR>:!filename.py<CR>a
VIMマニュアルのセクション40.1は非常に役立ちます。
他のヒント
さて、探しているものの最も単純な形式はpipeコマンドです。同じ行で複数のcmdlineコマンドを実行できます。あなたの場合、2つのコマンドは `w`を書き込み、現在のファイルを実行します`! %:p`。現在のファイルに対して実行する特定のコマンドがある場合、2番目のコマンドは次のようになります。 `!python%:p`。したがって、あなたの質問に対する最も簡単な答えは次のようになります。
:w | ! %:p
^ ^ ^
| | |--Execute current file
| |--Chain two commands
|--Save current file
最後に注意することは、すべてのコマンドを連鎖できるわけではないということです。 Vimドキュメントによると、特定のコマンドは引数としてパイプを受け入れ、チェーンを壊します...
autowrite オプションを使用します。
:set autowrite
ファイルの内容が変更されている場合、各:next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:! 、: make、CTRL-]およびCTRL- ^コマンド[...]
コマンドの組み合わせは|
文字を介して機能するように見えるので、:w|!your-command-here
を別のキーの組み合わせにエイリアスするようなものでしょうか?
ここに行きます:
:nmap <F1> :w<cr>:!%<cr>
保存<!> amp;走る (ただし、nモードにする必要があります-escとfor for iモードを追加するだけです)
別の可能性:
au BufWriteCmd *.py write | !!
これは、保存するたびにrun
になりますが、これは望んでいない場合があります。
これは.vimrc
に入れたもので、チャームのように機能します
nnoremap <leader>r :w<CR>:!!<CR>
もちろん、実行するコマンドがわかるように、この前にシェルコマンドを1回実行する必要があります。
例:
:!node ./test.js
vimでは、現在のバッファーの任意の範囲を外部コマンドにリダイレクトできます(bash、python、またはPythonスクリプトを所有している場合)。
# redirect whole buffer to python
:%w !python
現在のバッファに次の2行が含まれていると仮定します
import numpy as np
print np.arange(12).reshape(3,4)
then :%w !python
は、保存されているかどうかに関係なく実行します。以下のようなものを印刷してください
ターミナル、
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
もちろん、キーマップなどの永続的なものを作成することもできます。
nnoremap <F8> :.w !python<CR>
vnoremap <F8> :w !python<CR>
1つ目は現在の行を実行し、2つ目はpythonインタープリターを介してビジュアル選択を実行します。
#!! be careful, in vim ':w!python' and ':.w !python' are very different, the
first write (create or overwrite) a file named 'python' with contents of
current buffer, the second redirect the selected cmdline range (here dot .,
which mean current line) to external command (here 'python').
コマンドラインの範囲については、
を参照してください:h cmdline-ranges
以下ではなく、通常のコマンドに関するものであり、cmdlineのものではありません。
:h command-range
に触発された vim tips wikiから次の情報を得ました:
command! -complete=file -nargs=+ shell call s:runshellcommand(<q-args>)
function! s:runshellcommand(cmdline)
botright vnew
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
call setline(1,a:cmdline)
call setline(2,substitute(a:cmdline,'.','=','g'))
execute 'silent $read !'.escape(a:cmdline,'%#')
setlocal nomodifiable
1
endfunction
3行目でvnewに変更されましたが、Pythonの場合は次のようになります
map <F9> :w:Shell python %<cr><c-w>
f9を押すと、出力が新しい垂直分割スクラッチバッファーに保存、実行、ダンプされます。簡単にヤンク/保存などができます。また、cwを押すので、h / cを押すだけで閉じることができます。コード。
Bash内で作成してみてください。
t.c
というCファイルの場合、これは非常に便利です。
vi t.c && cc t.c -o t && ./t
および記号(&&
)は、1つのエラーメッセージがコマンドチェーンを破壊することを保証します。
Pythonの場合、これはさらに簡単になります。
vi t.py && python t.py
これは挿入モードでも動作します ...
" F5 => Save & Run python3 "
nnoremap <F5> :w <CR> :!sh -c 'python3 %' <CR>
inoremap <F5> <Esc> :w <CR> :!sh -c 'python3 %' <CR>
通訳で再入力するには長すぎるものをテストするために常に使用しています^^
-
IDLEへの切り替えを検討してください。 F5はすべてを実行します。
-
Komodoへの切り替えを検討してください。 F5がすべてを実行するようにコマンドを定義できます。