Vimの基礎知識

【Vimの基礎知識】外部コマンド&シェル連携でVimを超実用ツールへ進化

あなたはVimでの作業中に「この処理、シェルのコマンドで一気に片付けたい」と思ったことはありませんか。

テキストの並べ替えや検索、置換など、普段ならVimのコマンドで地道に繰り返す作業も、外部コマンドと組み合わせれば一瞬で処理できます。

例えば、ファイル全体を sort に通して並び替えたり、特定のエラー行だけを grep で抽出したりと、シェルの持つ強力な機能をそのままVimに取り込むことが可能です。

内部機能にこだわる必要はなく、Vimをシェルのフロントエンドとして活用することで、従来の作業が圧倒的に効率化されます。

この記事では、そんな「Vimとシェル連携の真価」を具体的に解説していきます。

Vimの基礎知識

🟢 Vimの基礎知識
📌 Linuxで必ず触れるテキストエディタの入門から応用までを体系化
 └─【Vimの基礎知識】入門から応用までを体系化した学習ロードマップ
   ├─ 入門編(初心者向け)
   | ├─ 【Vimの基礎知識】ゼロから始めるVim入門とモード終了、コマンド基本操作
   | ├─ 【Vimの基礎知識】テキスト編集の基本操作(挿入・削除・移動) 
   | ├─ 【Vimの基礎知識】viとvimの違い|現場で覚えるべきポイント
   | ├─ 【Vimの基礎知識】VimとEmacsの違い|Linux現場で使われるエディタの選び方
   | └─ 【Vimの基礎知識】主要コマンド一覧|移動・編集・検索・コピーモード切替の早見表
   ├─ 活用編(中級者向け)
   | ├─ 【Vimの基礎知識】検索・置換・コピー・ペーストの操作まとめ
   | └─ 【Vimの基礎知識】マウス不要!カーソルを乗せたら勝ち確定|ビジュアルモード
   ├─ 実践編(実務で役立つ)
   | ├─ 【Vimの基礎知識】Vimで複数ファイルを同時編集する方法とウィンドウ分割の基本
   | └─ 【Vimの基礎知識】外部コマンド&シェル連携でVimを超実用ツールへ進化
   ├─ 応用編(上級者向け)
   | ├─ 【Vimの基礎知識】マクロを活用した自動編集テクニック
   | └─ 【Vimの基礎知識】正規表現を使った高度なテキスト編集
   └─ 設定編(カスタマイズ)
     ├─ 【Vimの基礎知識】Vimを使いこなす基礎:.vimrcで快適な開発環境を構築する方法
     └─ 【Vimの基礎知識】VSCodeでVimを使う方法|GUIで再現するVim操作

外部コマンド連携の概要

Vimは単体でも高機能なエディタですが、単なるテキストエディタではありません。

単純な編集作業にとどまらず、外部コマンドを呼び出して並べ替えや抽出、変換を即座に反映できるため、日常の作業を効率化できます。

シェルや外部コマンドと組み合わせることで、ファイル編集とデータ処理を同じ画面上でシームレスに行える統合型の編集環境へと変化します。

:%!sort で行を並べ替えたり、:!ls でディレクトリの内容を確認したりと、通常ならターミナルに切り替える操作をすべてVimの中で完結できます。

こうした連携によって、Vimはエディタ以上の「作業ハブ」として活用できるのです。

ここでは外部コマンドを活用するメリットと基本的な仕組みを整理します。

Vimと外部コマンドを組み合わせるメリット

Vimは内部機能だけでは実現しにくい大規模処理を、シェルコマンドの力を借りて簡単に実行できます。

grepで特定の行を抽出したり、sortで並べ替えたりすることで、通常なら複数ステップが必要な作業を一瞬で完了させられます。

対象ファイル: sample.txt

AAA
CCC
BBB

sample.txt を対象に下記のコマンドを実行します。

:%!sort

このコマンドはファイル全体を sort に渡してアルファベット順に並べ替えます。

【出力例:】

AAA
BBB
CCC

このように、通常の編集では手間がかかる並べ替えも外部コマンドなら一発で処理でき、作業時間を短縮できます。

利用が多いシーンと基本的な仕組み

外部コマンド活用の基本は「ファイル内容を外部プログラムへ渡し、その結果をVimに反映する」流れです。

全体を処理するだけでなく、選択範囲や1行だけを対象に実行することも可能です。

特にログ解析や大量テキストの加工では大きな効果を発揮します。

対象ファイル: error.log

NFO: system start
ERROR: disk full
INFO: process done
ERROR: memory leak

error.log を対象に下記のコマンドを実行します。

:g/ERROR/

このコマンドはエラー行を抽出するシンプルな例です。外部コマンドを組み合わせるとさらに強力になります。

error.log を対象に下記のコマンドを実行します。

:%!grep ERROR

【出力例:】

ERROR: disk full
ERROR: memory leak

このように、外部コマンドは単なる補助ではなく、Vimの操作体系に溶け込んだ強力な武器となります。

シェルの知識を組み合わせれば、Vimはただのエディタから効率化のための作業基盤へと進化します。

基本操作と代表的なコマンド

外部コマンドを取り入れると、Vimの操作だけでは実現が難しい処理を一瞬で行えるようになります。

単純な編集にとどまらず、大量の行から重複を削除したり、特定の範囲を一括置換したりするなど、実務で直結する効率化が可能です。

ここでは新しいコマンド例を通して基本的な活用方法を紹介します。

外部コマンドを使ったファイル全体の加工

ファイル全体を対象に外部コマンドを実行すれば、大規模な加工処理を一括で反映できます。

対象ファイル: list.txt

apple
banana
apple
orange

banana list.txt を対象に下記のコマンドを実行します。

:%!uniq

このコマンドはファイル全体を uniq に渡し、重複する行を削除します。

【出力例:】

apple
banana
orange

選択範囲を外部コマンドへ渡す方法

必要な部分だけを対象に外部コマンドを適用すると、不要な加工を避けつつ効率的に修正できます。

対象ファイル: config.txt

host=localhost
port=8080
debug=true
log=enabled

config.txt の2行目から3行目を選択し、下記のコマンドを実行します。

:'2,3!sed 's/[0-9]/9/g'

このコマンドは選択範囲内の数字を「正規表現」を使用してすべて「9」に置き換えます。

【出力例:】

host=localhost
port=9999
debug=true
log=enabled

このコマンドで使われている正規表現s/[0-9]/9/gは「数字をすべて9に置き換える」という意味です。角かっこの中の [0-9]
が「0から9までの数字」を表しており、パターンに合致する文字をまとめて処理できます。Vimから :'2,3!sed 's/[0-9]/9/g'
と実行すれば、2行目から3行目の範囲にある数字がすべて9に変換されます。

正規表現は複雑に見えますが、この例のように「特定の文字を一括で変換する」といった用途で覚えると理解しやすいです。

より高度な使い方や応用は別記事で整理していますので、必要に応じてそちらを参照してください。

結果をバッファへ反映する基本手順

外部コマンドによる変換結果を直接バッファに反映できるため、編集作業を中断せずに続行できます。

対象ファイル: words.txt

alpha
beta
gamma

words.txt の全体を対象に下記のコマンドを実行します。

:%!tr a-z A-Z

このコマンドは小文字を大文字に変換し、その結果をバッファに反映します。

【出力例:】

ALPHA
BETA
GAMMA

よく使うコマンド一覧表(uniq・sed・tr・awkなど)

外部コマンドの中でも、Vimと組み合わせてよく利用されるものを整理しました。状況に応じて使い分けることで、柔軟な加工処理が可能になります。

コマンド用途具体例
uniq重複行の削除:%!uniq
sed文字列の置換:%!sed 's/foo/bar/g'
tr文字の変換:%!tr a-z A-Z
awk列の抽出や加工:%!awk '{print $2}'
awkとは?

正確に言うと awkはシェルそのものではなく、テキスト処理専用のプログラミング言語 です。シェル(bashなど)から呼び出して使うことが多いため「シェルコマンドの仲間」と誤解されがちですが、実際には独立したインタプリタ言語です。

awkの特徴は、行単位・列単位のデータ処理に強い点です。特に区切り文字(デフォルトは空白)で分割して扱えるため、ログやCSVのような構造化テキストを加工するのに最適です。

対象ファイル:sample.txt

alice 24 engineer
bob 31 designer

例として、2列目を抜き出すには次のように書きます。

awk '{print $2}' file.txt

【出力例:】

24
31

Vimと連携させれば、バッファ内のデータから必要な列だけを取り出すなど、実務に即した加工が可能になります。

awkの概要

  • awk = 独立したプログラミング言語(シェルに組み込まれているわけではない)
  • 実務で多用されるのは「列の抽出・加工」
  • Vimと組み合わせるとファイル編集がさらに効率化

これらを活用すれば、Vimは単なるエディタを超えて、柔軟で強力なテキスト処理環境として機能します。

活用と応用のポイント

外部コマンドは基本的な加工処理だけでなく、検索や置換、選択範囲の加工、さらにはシェルワンライナーとの組み合わせによって応用力を大きく広げられます。

ここでは実務で役立つ具体的な使い方を確認し、Vimをさらに効率的な作業環境へと進化させるポイントを解説します。

検索や置換と組み合わせた効率化

検索や置換と外部コマンドを併用すると、複雑な修正も最小限の手間で実行できます。

例えば特定のキーワードを検索してから、行ごとに置換処理を外部コマンドに任せると効率的です。

対象ファイル: data.txt

user1: active
user2: inactive
user3: active
user4: inactive

data.txt を対象に下記のコマンドを実行します。

:%!sed 's/inactive/disabled/g'

このコマンドはファイル全体を sed に渡し、inactive を disabled に置き換えます。

【出力例:】

user1: active
user2: disabled
user3: active
user4: disabled

ビジュアルモードとの連携による柔軟な加工

ビジュアルモードで範囲を選択し、外部コマンドに渡すことで必要な部分だけを効率的に加工できます。

特にテーブル状のデータを整形するときに役立ちます。

対象ファイル: table.txt

id name age
1 Alice 23
2 Bob 31
3 Carol 28

table.txt の2行目から3行目を選択し、下記のコマンドを実行します。

:'2,3!awk '{print $2}'

このコマンドは選択範囲を awk に渡し、2列目(名前部分)のみを抽出します。

【出力例:】

Alice
Bob

シェルワンライナーを組み合わせた活用例

外部コマンドは単独で使うだけでなく、複数のシェルコマンドを組み合わせたワンライナーとして実行することも可能です。

これにより、フィルタリングから整形までを一度の処理で完結できます。

対象ファイル: access.log

192.168.0.1 GET /index.html
192.168.0.2 POST /login
192.168.0.1 GET /about
192.168.0.3 GET /index.html

access.log を対象に下記のコマンドを実行します。

:%!awk '{print $1}' | sort | uniq

このコマンドは1列目のIPアドレスを抽出し、並べ替えた後、重複を削除します。

【出力例:】

192.168.0.1
192.168.0.2
192.168.0.3

このように、検索や置換、範囲選択、さらにワンライナーを活用することで、Vimはテキスト編集にとどまらず、多彩な加工処理を即時に実行できる柔軟なツールへと進化します。

トラブルと対処法

外部コマンドを活用すると作業効率は大きく向上しますが、その一方で思わぬエラーやトラブルに直面することもあります。

原因を正しく理解し、適切な対処法を知っておくことで、安心して外部コマンドを活用できるようになります。

ここではよくあるトラブルの種類とその解決策を整理します。

外部コマンド実行時のエラー原因

外部コマンドを呼び出した際に「command not found」などのエラーが発生する場合は、そもそも対象コマンドがインストールされていないか、環境変数の設定に問題があるケースが多いです。

ここでは「存在しないコマンドを指定した場合の挙動」を確認するために、あえて実在しない名前を指定します。

対象ファイル: sample.txt

abc
def

sample.txt を対象に下記のコマンドを実行します。

:%!notfoundcmd

このコマンドは存在しないコマンドを呼び出すため、エラーが発生します。

【出力例:】

sh: notfoundcmd: command not found

このような場合は、必要なパッケージをインストールするか、正しいコマンド名に修正する必要があります。

パスや権限が原因となるケース

実行ファイルが存在しても、PATHに含まれていなかったり、実行権限が不足しているとエラーが出ることがあります。

権限の確認と修正は基本的な対処法のひとつです。

対象ファイル: log.txt

test

log.txt を対象に下記のコマンドを実行します。

:%!/home/user/myscript.sh

myscript.sh に実行権限がない場合、エラーが表示されます。

【出力例:】

sh: /home/user/myscript.sh: Permission denied

この場合は権限を付与することで解決できます。

chmod +x /home/user/myscript.sh

誤操作や上書きを防ぐ工夫

外部コマンドの実行結果はそのままバッファに反映されるため、誤って上書きしてしまう危険があります。

バックアップを作成してから処理を行えば、トラブルを未然に防ぐことができます。

対象ファイル: config.txt

setting1=yes
setting2=no

config.txt を保存する前に、下記のコマンドでバックアップを作成します。

:w config_backup.txt

【出力例:】

"config_backup.txt" [New] 2L, 28B written

このように、バックアップを取ってから外部コマンドを適用することで、万一の誤操作があっても元に戻すことが可能になります。

まとめと次のステップ

外部コマンドとの連携は、Vimを単なるエディタから効率化ツールへと大きく進化させる力を持っています。

ファイル全体を加工したり、選択範囲だけをシェルに渡したりといった柔軟な操作は、日常の作業を格段にスピードアップしてくれます。

また、テキスト整形やログ分析など、シェルで行う処理をそのままエディタ内で完結できるため、画面を行き来する煩わしさがなくなるのも大きな利点です。

実務で扱う多くのシーンに応用できるため、ここで学んだ内容を自分の作業に取り入れることが大切です。

外部コマンド活用の要点整理

外部コマンドを活用する際は、基本の呼び出し方「:!」とフィルタ機能「:%!command」の違いを理解しておくと安心です。

前者は結果を画面に一時表示するだけですが、後者はバッファ内容そのものを加工できます。

また、パイプやワンライナーを使うことで、複雑な処理も簡潔にまとめられます。

さらに、必要な範囲を選択してから外部コマンドを適用することで、部分的な加工にも柔軟に対応できます。

次に学ぶべき応用機能(マクロ活用と自動編集)

外部コマンド連携を理解したら、次のステップとして「マクロ」を学ぶと効率化の幅がさらに広がります。

外部コマンドがシェルの力を借りるのに対し、マクロはVim内部の操作を自動化する手段です。

繰り返しの編集作業を記録して再生することで、単調な処理を大幅に削減できます。

外部コマンドとマクロを組み合わせれば、シェルとエディタ双方の強みを最大限に引き出せるようになり、日々の作業が一層スムーズになります。

🟢 Vimの基礎知識シリーズは段階的に進められる構成になっており、入門から実践、応用、カスタマイズまで体系的に学べます。

次のおすすめ記事

実践環境を整える

ここまで学んだ知識を実際に試すには、Linuxを動かす環境が必要です。手軽に始めるならVPSを利用するのがおすすめです。
VPS徹底比較!ConoHa・さくら・Xserverの選び方



VPSを利用してLinux環境を準備したら、実際の設定は下記の記事が参考になります。
VPSに開発環境を自動構築する方法|Apache+Tomcat+PostgreSQL

よく読まれている記事

1

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか? 無料で使えるだけでなく、高い柔軟 ...

2

Linux環境でよく目にする「Vim」という名前。サーバーにログインしたら突然Vimが開いてしまい、「どうやって入力するの?」「保存や終了ができない!」と困った経験をした人も多いのではないでしょうか。 ...

3

ネットワーク技術は現代のITインフラにおいて不可欠な要素となっています。しかし、ネットワークを深く理解するためには、その基本となる「プロトコル」と「レイヤ」の概念をしっかり把握することが重要です。 こ ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

5

Javaは世界中で広く使われているプログラミング言語であり、特に業務システムやWebアプリケーションの開発において欠かせない存在です。本記事では、初心者向けにJavaの基礎知識を網羅し、環境構築から基 ...

-Vimの基礎知識