株式会社グローバルゲート公式ブログ

vi中級者へのステップアップ!実務で役立つコマンド解説

こんにちは!株式会社グローバルゲートでサーバ管理をしてるタカです。 
 
以前、「viエディッタとは?基本的な使い方と便利な操作方法」では、viの起動方法や基本的な編集操作を中心にご紹介しました。viに初めて触れた方にとって、「思ったよりシンプルかも」と感じたのではないでしょうか? 

しかし、viの本領はここから。日々の業務でよりスムーズに、そして効率よくファイル編集を行うためには、中級者向けのコマンドや操作の習得が不可欠です。今回はその第一歩として、実務の現場で役立つ2つの機能「行番号表示(:set nu)」と「マーク(mコマンド)」にフォーカスします。 

エラーメッセージの行番号を頼りに素早く目的の箇所へジャンプしたり、一時的に位置を記憶して複雑な編集作業を行ったり、こうした「ちょっと差がつくviの使い方」は、覚えておくと本当に便利。「viに慣れてきたけど、もっと使いこなしたい!」という方に向けて解説していきますので、ぜひ最後までお付き合いください。

set nu で行番号を表示する

viエディッタを使ってファイルを開いたとき、「どこに何が書かれているか分かりにくい…」と思ったことはありませんか?
特に長い設定ファイルやログを扱うとき、「〇〇行目の内容を修正してください」と言われても、行番号が表示されていないと探すのがとても大変です。 

そんなときに役立つのが、行番号を表示するコマンド :set nu です。これはとてもシンプルなコマンドで、viでファイルを開いたあとに、以下のように入力するだけでOKです。

■:set nu 

  133  Listen 80 
行番号があると、なにが便利? 

行番号が表示されると、いろんな場面で便利になります。たとえば、エラーメッセージに「12行目にミスがあります」と書かれていたとき、すぐにその行を見つけられる 
編集したい行の番号が分かっていれば、 :12 と入力するだけで12行目にジャンプできる 
複数の設定項目があるとき、位置関係を把握しやすくなる 
特に、設定ファイルの修正やサーバーのトラブル対応では、「何行目に何が書いてあるか」を正確に知ることがとても重要なんです。
 
行番号を元に戻したいときは? 
もちろん、行番号を非表示に戻すこともできます。そのときは、次のコマンドを使います。

:set nonu 

これで、もとの「行番号なし」の状態に戻ります。「ちょっとごちゃごちゃして見づらいな…」というときには、nonuで消してみてもいいかもしれませんね。
 
実は、もっと便利な方法も(※補足) 
実はviの中でも「vim」という進化版を使っている場合、次のような行番号の表示方法もあります。

:set relativenumber 

これは、自分が今いる位置から「上に何行」「下に何行」と表示してくれる機能です。コマンドで数行ずつ移動するときに便利ですが、これはまた別の記事で詳しく紹介する予定です。

m コマンドで「マーク」を活用しよう

長いファイルを編集しているときに、「さっき見ていた場所にもう一度戻りたいな…」と思ったことはありませんか?
画面を上下にスクロールして探すのは時間がかかるし、途中で別の場所を編集していたら、どこだったか分からなくなってしまうこともありますよね。 
そんなときに便利なのが、「マーク(しるし)」をつける機能です。viエディッタでは、mコマンドを使うことで、ファイルの中の好きな場所にマークをつけることができます。 
 
マークをつける基本の使い方 
マークをつけたい場所で、キーボードからこのように入力します 。

:ma 

これは、「今の位置に a という名前のマークをつける」という意味です。「m」はマークのm、「a」は任意の名前で、アルファベットの小文字なら何でもOKです。たとえば「mb」なら「bというマーク」、「mc」なら「cというマーク」として保存できます。 
 
■マークした場所へ戻るには?
マークをつけたあと、別の場所を編集していても、簡単にそのマーク位置へ戻ることができます。
 
行の先頭に戻る
シングルクォート 'a を入力します。

正確な位置(文字単位)に戻る
バッククォート `a を入力します。
たとえば、ファイルの30行目で ma と入力しておき、あとで 'a と入力すれば、その30行目の先頭にジャンプできます。
これだけで「迷子にならない編集」ができちゃうんです。
 
■実務での活用例 
複数箇所を修正するときに、チェックポイントとして使う 
設定ファイルの「前半」と「後半」を行き来したいとき 
レビュー中に、あとで見直したい場所をマークしておく 
「あとでここに戻ろう」と思った場所に ma をつけておくだけで、すぐジャンプできるので作業のムダが激減します! 
 

実務での使用シーン

viエディッタは、Linuxサーバー上で設定ファイルを編集するときによく使われます。とくにターミナル上で作業するサーバー管理者やエンジニアにとっては欠かせないツールです。

ここでは、実際の業務でよくあるシーンを取り上げながら、前のセクションで紹介した :set num コマンドがどんなふうに役立つのかを紹介していきます。これを読めば、「あっ、明日の作業で使えそう!」と思ってもらえるはずです。 
 
シーン①:エラーメッセージに対応するとき 
Linuxで作業していると、こんなメッセージに出会うことがあります。
 
/etc/httpd/conf/httpd.conf: line 42: Invalid command 'Listen80' 

この「line 42」が意味するのは、「設定ファイルの42行目にミスがありますよ」ということ。 
ここで :set nu をしていないと、42行目がどこかを目で数えるしかありません。
ですが、あらかじめ行番号を表示しておけば、エラーの原因をすぐに特定できます。
 
さらに、ファイルを開いたあとに :42 と入力すれば、ジャンプ一発で該当行に移動できます。このように :set nu は、トラブルシューティングのスピードアップに大きく貢献してくれるんです。 
 
シーン②:長い設定ファイルの複数箇所を修正するとき 
サーバー設定ファイルは、数十行、数百行におよぶことも珍しくありません。
たとえば /etc/httpd/conf/httpd.conf のようなApacheの設定ファイルでは

・ポート番号の設定(前半) 
・モジュール読み込み(中盤) 
・ドキュメントルートの設定(後半) 

といったように、場所がバラバラで関係する設定が登場します。 
こういうとき、最初に開いた場所にマークをつけておくことで、あとからすぐに戻ることができます。
たとえば:ma
と入力して「a」というマークを設定し、後半に移動して別の設定を編集。
その後に 'a と入力すれば、先ほどの場所にすぐ戻れるのです。 

このワザは、ファイルの前後を何度も行き来して設定を見比べたり修正したりするときに超便利!
viを使っていて「どこだっけ?」と迷子になりがちな人にとっては、まさに救世主のような機能です。 
 
シーン③:共同作業や引き継ぎメモとして活用 
チームで作業していると、viで編集した設定ファイルの中で「この辺、修正したよ」や「ここ見直してほしい」と伝える必要が出てくることがあります。 
そんなときもマークが活躍します。 

例えば「bというマークをつけた場所に注意してね」と伝えると
チームメンバーがvi上で :'b 
と入力するだけで、直接その行にジャンプできます。
 
また、マークの一覧を見る :marks を使えば、複数のマークがファイルのどこにあるか一目でわかるので、“軽い目印”としても使えるんです。 
これは、Gitやコメント機能が使えない環境で作業しているときなどに、とても便利な裏技になります。 
 
シーン④:一時的なメモがわりとして使う 
マークは削除したり上書きしたりできるので、一時的なメモや目印としても使えます。たとえばファイルの中に mamb などを付けておいて、作業の途中で 'a 'b と戻る。用が済んだら無視すればOKという、軽快な使い方もできます。

最後に

初心者のうちは「viってなんだか怖い」「閉じ方がわからない」と思うかもしれませんが、ひとつずつ便利なコマンドを覚えていくと、まるで自分の手足のように使えるツールへと進化していきます。
 
行番号の表示とマークは、その第一歩。とくに実務では「正確さ」と「スピード」が求められる場面が多いため、こうした小技の積み重ねが、後々の大きな差になります。 

GSVは企業の大切なデータを守る安全なNASサーバーシステムです。自動バックアップやRAID構成による多重保存で、データの消失リスクを最小限に抑えます。ネットワーク接続だけで社内外から安全にデータにアクセス可能で、異なるOS間でもスムーズな運用が可能です。        
        
スケジュール管理やToDoリストの一元管理機能を備え、チームの業務効率化を支援します。契約期間中の無償アップデートで常に最新機能を利用可能です。        
        
さらに、無停電電源装置(UPS)の標準装備、ウイルス検知システム、柔軟なアクセス制限により、物理的な障害やセキュリティリスクからも企業データを保護。GSVは安全で効率的なデータ管理環境を提供します。

【関連記事】

ご相談・お問い合わせ

当社サービスについてのお問い合わせは下記までご連絡下さい。

お電話でのお問い合わせ

06-6121-7581 / 03-6415-8161