2

私のvimrcには次のものがあります:

    nnoremap <F1> :!screen -S foo -p run -X stuff '!!^M'

ただし、F1 をクリックすると、次のエラーが表示されます。以前のコマンドはありません。

私が欲しいのは、「foo」という名前のスクリーンセッションの「実行」ウィンドウに、直前に実行したものを実行するように指示することです。

4

2 に答える 2

3

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>

于 2012-10-31T19:34:52.063 に答える
0

次のようなトリックを使用して履歴ファイルを保存してみます: 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 " '!!'"
于 2012-10-31T19:22:01.470 に答える