私のvimrcには次のものがあります:
nnoremap <F1> :!screen -S foo -p run -X stuff '!!^M'
ただし、F1 をクリックすると、次のエラーが表示されます。以前のコマンドはありません。
私が欲しいのは、「foo」という名前のスクリーンセッションの「実行」ウィンドウに、直前に実行したものを実行するように指示することです。
私のvimrcには次のものがあります:
nnoremap <F1> :!screen -S foo -p run -X stuff '!!^M'
ただし、F1 をクリックすると、次のエラーが表示されます。以前のコマンドはありません。
私が欲しいのは、「foo」という名前のスクリーンセッションの「実行」ウィンドウに、直前に実行したものを実行するように指示することです。
bash によって実行されることを意図している場合(したがって、「その画面インスタンスで!!
以前に実行したものをすべて実行する」)、それをエスケープする必要があります。
nnoremap <F1> :!screen -S foo -p run -X stuff $'\!\!\n'<CR>
または使用system()
:
nnoremap <F1> :call system('screen -S foo -p run -X stuff $''!!\n''')<CR>
. !
in any bang thingie は、「他の bang thingie を使用して vim で以前に実行したものをここに配置する」ことを意味するためです。</p>
次のようなトリックを使用して履歴ファイルを保存してみます: http://www.cuberick.com/2008/11/update-bash-history-in-realtime.html
次に、履歴を取得したら、コマンドをパラメーターとして screen をscreen dmesg
実行します。コマンドが実行されて終了することに注意してください。終了させたくない場合は、終了しますscreen bash -c "dmesg ; bash"
(または実行するシェルは何でも)。というわけで、コツがわかったらdmesgの代わりに「tail -n1 .bash_history」を入れるのがポイント。
編集:
申し訳ありませんが、後で「vim」のキャプションに気付きました。それは私にとってこのように機能します:
:nnoremap <F1> :!screen bash -c " '!!'"