Gary Bernhardtがスクリーンキャストで行っているようにVim内でシェルコマンドを実行するにはどうすればよいですか?
GaryBernhardtのDestroyAll Softwareスクリーンキャスト、特にA Compiler fromScratchを見ています。そこで、彼はVimを離れることなくシェルコマンドを実行します。彼は通常のVim構文を使用しているとほぼ確信しています。たとえば、1分マークです:!chmod u+x compiler.rb
。コンピューターでこれを行うと、ウィンドウが切り替わり、シェルコマンドが実行されます。その後、Enterキーを押してエディターに戻る必要があります。これは、Vimの通常の動作であり、他の人が以前にこれを尋ねたことがあると思いますが、Garyのように答えが出るとは思いません。
私は彼の.vimrcファイル、特にスクリーンキャストがアップロードされる前の最後のバージョンを見ましたが、私が探している動作を得るために彼が何を変更したのか理解できませんでした。ダウンロードしましたが、まだ正しい動作が得られないため、明らかに何かが足りません。彼のプラグインはどれもこれに関連していないようですので、私はほとんどそれらを無視しました。
私は、用途がTMUXという解決策を探している、またはものなどいないよということはほぼ確信している:split
、:term
、:below terminal
、または:silent
。また、Vim以外のものを使用する答えも探していません。GaryはVimといくつかのプラグインを使用しているだけだと思います。
ゲイリーがVimについて具体的に話しているスクリーンキャストを見ましたが、彼はこの質問に答えていませんでした(または私はそれを聞き取れませんでした)ので、誰かが:! <shell command>
テキストエディターを離れずに使用する方法を理解した場合は、本当に感謝していますあなたは私がこれを解決するのを手伝うことができます。以前に述べたオプションをMacとLinuxの両方でテストしましたが、希望どおりに機能するものはなく、どちらのプラットフォームでも機能するソリューションに満足しています。
回答
ビデオはすぐに通り過ぎますが、私はそれを一時停止し、彼が次のように入力するのを見たようです。
:!chmod u+x %
次に、この出力を生成します。
:!chmod u+x compiler.rb
[No write since last change]
"compiler.rb" 5L, 42C
Press ENTER or type command to continue
したがって、実際には、Vimはコマンドの完了後に「Enterキーを押す」というプロンプトを表示しますが、非常に速く押したようです(おそらく、彼はすでにそれを期待していたのでしょうか?または次のコマンドを押し始めたのでしょうか?)。スキップしました。
ここで関連する2つの設定があります。1つはコマンドの実行中に代替画面から切り替わらないようにする設定、もう1つは外部コマンドによって変更されたファイルを自動的に再読み込みする設定です(権限のみが変更された場合でも)。
彼のGitHubdotfilesリポジトリを見ると、2017年6月29日(そのビデオが公開されたとき)のvimrcで両方の設定を実際に確認できます。
- 代替画面から切り替わらないようにVimを設定するには、次のスニペットを使用します。
" Prevent Vim from clobbering the scrollback buffer. See
" http://www.shallowsky.com/linux/noaltscreen.html
set t_ti= t_te=
- この設定で外部操作が行われた後、ファイルを自動的にリロードするようにVimを構成します。
set autoread
これらの2つの設定をオンにすると、[No write since last change]
メッセージが表示されないことを除いて、ほぼ正確にsame.effectを再現できます。chmod
コマンドの直前にファイルを書き込んだばかりだったので、どこから来たのかよくわかりません。(証拠として、ステータス行には[+]
ファイル名の横に表示されません。これは、変更されたバッファーを示します。)
おそらくそれは彼のvimrcからの何か他のものです...理論的には、GitHubからそれを取得して同じことを試すことが可能であるはずです。ビデオはVim7.4を使用しているようですので、それもその一部である可能性があります。
まだ彼のGitHubdotfilesリポジトリを見ると、Vimがスクロールバックバッファーを壊すのを許可したように見えるので、彼はその部分について考えを変えました。
その部分にまだ興味がある場合は、プラグインvim-altscreenを見てください。これは、その動作を実装し、その周りにいくつかのコントロールがあります。質問「代替画面:!{cmd}との違い」:w !{cmd}に関する説明、特に@ user938271の例外的な回答も参照してください。