Vimの使い方 · 1 min read · Nov 16, 2025
Vim内からシェルにアクセスする方法または外部コマンドを実行する方法

Vimは、すでにご存知かもしれませんが、機能が豊富で強力なエディタです。HowtoForgeでは、Vimに関するいくつかのチュートリアルを執筆しており、その基本的な使用法、プラグイン、その他の便利な機能をカバーしています。しかし、Vimが提供する機能の海の中で、私たちは常に読者と共有するための便利な何かを見つけています。
このチュートリアルでは、エディタウィンドウ内から外部コマンドを実行する方法と、コマンドラインシェルにアクセスする方法に焦点を当てます。
Vimで外部コマンドを実行する
時々、Vimエディタウィンドウ内から外部コマンドを実行したい場合があります。たとえば、Vimでファイルを開き、いくつかの変更を加えた後、変更を保存しようとしたときに、Vimが十分な権限がないというエラーを表示する状況を考えてみてください。
現在のvimセッションを終了し、十分な権限でファイルを再度開くことは、あなたが行ったすべての変更を失うことを意味しますので、ほとんどの場合、それは選択肢ではないことに同意するでしょう。このような状況では、エディタ内から外部コマンドを実行する能力が役立ちます。
上記のユースケースには後で戻りますが、今はvim内から基本的なコマンドを実行する方法を理解しましょう。
ファイルを編集しているときに、そのファイルに含まれる行数、単語数、文字数を知りたいとします。これを行うには、Vimのコマンドモードでコロン(:)を入力し、次にビックリマーク(!)を入力し、最後にコマンド(この場合は’wc’)を入力し、ファイル名を続けます(現在のファイルには%を使用)。
:! wc %以下はその例です:
実行の準備が整った前述のコマンドを含むファイル:

そして、ターミナルでの出力は次のとおりです:
出力を確認したら、Enterキーを押すと、Vimセッションに戻ります。
この機能は、たとえばコードやスクリプトを書いているときに、コード/スクリプトにコンパイル時エラーや構文エラーが含まれているかどうかをすぐに知りたい場合に非常に便利です。
次に、出力をファイルに追加する必要がある場合は、’:read !’コマンドを使用します。以下はその例です:
:read ! wc %‘read’コマンドは、外部コマンドの出力を現在編集しているファイルの現在の行の下に新しい行として挿入します。特定の行番号を指定することもでき、その行の後に出力が追加されます。
たとえば、以下のコマンドは、ファイルの2行目の後に’wc’の出力を追加します。
:2read ! wc %注意:最後の行の後に挿入するには’$’を使用し、最初の行の前に挿入するには’0’を使用します。
さて、最初に議論したユースケースに戻ると、ファイルを閉じることなく保存するのに役立つコマンドがあります(つまり、未保存の変更を失うことはありません)そして、たとえばsudoで開くことができます。
:w ! sudo tee %
Vimでシェルにアクセスする
個々のコマンドを実行することに加えて、Vim内から新しく起動したシェルに自分をドロップすることもできます。これを行うには、エディタから次のコマンドを実行するだけです:
:shellまたは
:shシェル作業が完了したら’exit’と入力すると、最初に離れたVimセッションに戻ります。
覚えておくべき抜け穴
シェルにアクセスする能力は、現実世界で確かに独自の用途がありますが、特権昇格技術としても使用される可能性があります。以前のチュートリアル(sudoeditに関する)で説明したように、ユーザーにVimを通じて1つのファイルを編集するためだけにsudoアクセスを提供しても、この技術を使用してエディタ内から新しいシェルを起動し、その後’root’またはスーパーユーザーとして何でもできるようになります。
Vim内から外部コマンドを実行する能力は、多くの状況で役立つ重要な機能です(このチュートリアルで言及したいくつかの状況があります)。この機能の学習曲線は急ではないので、初心者と経験豊富なユーザーの両方がそれを利用できます。
この機能をかなりの間使用していますか?何か共有したいことはありますか?以下のコメントにあなたの考えを残してください。もしかしたら、Linuxのteeコマンドにも興味があるかもしれません。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。