Linuxのコマンドラインを快適に!set -o viでシェル操作を効率化する方法

Linuxでターミナル操作をしていると、「もっと効率よくコマンドを編集できたらいいのに」と思ったことはありませんか?
そんな時に便利なのが、シェルの操作モードを変更できるコマンド set -o vi です。
このコマンドを使うと、bashなどのシェルで「viエディタの操作感」でコマンドラインを編集できるようになります。
コマンド履歴の検索や、カーソル移動、文字編集などが劇的にスムーズになり、慣れると手放せなくなる便利機能です。
この記事では、set -o vi の基本的な使い方から、知っておくと便利なテクニックまで詳しく解説していきます。


set -o viとは?

set -o vi は、bashやzshといったシェルで、コマンドラインの編集モードを「viモード」に切り替えるためのコマンドです。

通常、bashのコマンドラインは「Emacsモード」と呼ばれる設定になっており、Ctrl + A で行の先頭、Ctrl + E で行の末尾に移動するなど、Emacs風のキー操作が可能です。

一方、set -o vi を実行すると、コマンド入力中に ESC を押すことで、viのノーマルモードと同じように、カーソル移動や編集をキーボードから効率よく行えるようになります。


set -o viの基本的な使い方

モードの切り替え

まず、set -o vi を有効にするには、ターミナルで次のように入力します。

$ set -o vi

これで、次回のコマンド入力から viモードが有効になります。

なお、現在の編集モードを確認するには、set -o を実行します。

$ set -o | grep editing
vi on

ノーマルモードとインサートモード

viモードには「ノーマルモード」と「インサートモード」の2つがあります。

  • コマンド入力時は インサートモード
  • ESC を押すと ノーマルモード に切り替わる

ノーマルモードでは以下のような操作が可能です。

  • h:左に移動
  • l:右に移動
  • w:次の単語へ
  • b:前の単語へ
  • 0:行の先頭へ
  • $:行の末尾へ
  • x:カーソル上の1文字削除
  • dd:行全体を削除
  • u:操作の取り消し(Undo)
  • p:貼り付け(Paste)

ia を押すと、再びインサートモードに戻ります。viエディタと同じ感覚ですね。


コマンド履歴を自在に検索する

viモードでは、履歴検索もスムーズに行えます。

k / j で上下に履歴をたどる

ノーマルモードで kj を押すことで、以前のコマンド履歴を上下に移動できます。Emacsモードの Ctrl + R に比べて、直感的な履歴の参照が可能です。

/文字列 で検索も可能

ノーマルモードで / を押し、続けて文字列を入力すると、履歴の中からその文字列を含むコマンドを検索できます。

/ssh

n キーを押すと次の一致に、N キーで前の一致に移動します。


効率的なコマンド編集の例

以下は実際によく使う編集例です。慣れると非常に便利です。

コマンドの途中を編集する

たとえば、次のようなコマンドを打っていたとします:

$ scp file.txt user@remote:/tmp/

ここで、ファイル名を file2.txt に変えたいとします。

  1. ESC を押してノーマルモードに
  2. b で「file.txt」にカーソルを合わせる
  3. cw で「file.txt」を削除しつつインサートモードへ
  4. 「file2.txt」と入力

これだけでOKです。cw は「単語を削除して編集モードに入る」という意味です。


set -o viを常に有効にする方法

毎回ターミナルを開くたびに set -o vi を打つのは面倒ですよね。
恒久的に設定したい場合は、ホームディレクトリのシェル設定ファイルに追記しておくのが便利です。

たとえば、bashを使っている場合は ~/.bashrc に次のように書きます:

# viモードを有効にする
set -o vi

zshユーザーなら ~/.zshrc に同様の記述をします。
その後、設定を反映させるために source ~/.bashrc を実行してください。


Emacsモードとの比較

操作内容Emacsモードviモード
行の先頭Ctrl + A0(ノーマルモード)
行の末尾Ctrl + E$(ノーマルモード)
単語単位移動Alt + F / Alt + Bw / b(ノーマルモード)
前のコマンドCtrl + Pk(ノーマルモード)
履歴検索Ctrl + R/検索語(ノーマルモード)
削除Ctrl + D or Backspacex(ノーマルモード)

viモードはviエディタに慣れている人にとって非常に自然な操作感で、慣れればEmacsモードより高速な編集が可能です。


注意点と補足情報

  • viモードでは、入力途中で ESC を押し忘れるとノーマルモードに入れないので、最初は慣れが必要です。
  • WindowsのGit Bashでも set -o vi は有効です。ただし環境によってはキー挙動が完全に一致しない場合があります。
  • ターミナルによっては、ESC キーの反応に遅延がある場合も。そんな時は Ctrl + [ を代用するとよいです。

まとめ

set -o vi は、Linuxのシェル操作をより快適にするための隠れた便利機能です。
viエディタのキー操作に慣れている人はもちろん、まだ使ったことがない方も、ぜひ一度試してみてください。
慣れればコマンド履歴の検索や編集が格段に効率化され、日々の作業がぐっと楽になります。

Linuxユーザーなら、知っておいて損のないテクニックです。
まずは set -o vi を試して、ターミナルの使い心地をアップグレードしてみましょう!

タイトルとURLをコピーしました