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)
i
や a
を押すと、再びインサートモードに戻ります。viエディタと同じ感覚ですね。
コマンド履歴を自在に検索する
viモードでは、履歴検索もスムーズに行えます。
k / j で上下に履歴をたどる
ノーマルモードで k
や j
を押すことで、以前のコマンド履歴を上下に移動できます。Emacsモードの Ctrl + R に比べて、直感的な履歴の参照が可能です。
/文字列 で検索も可能
ノーマルモードで /
を押し、続けて文字列を入力すると、履歴の中からその文字列を含むコマンドを検索できます。
/ssh
n
キーを押すと次の一致に、N
キーで前の一致に移動します。
効率的なコマンド編集の例
以下は実際によく使う編集例です。慣れると非常に便利です。
コマンドの途中を編集する
たとえば、次のようなコマンドを打っていたとします:
$ scp file.txt user@remote:/tmp/
ここで、ファイル名を file2.txt
に変えたいとします。
ESC
を押してノーマルモードにb
で「file.txt」にカーソルを合わせるcw
で「file.txt」を削除しつつインサートモードへ- 「file2.txt」と入力
これだけでOKです。cw
は「単語を削除して編集モードに入る」という意味です。
set -o viを常に有効にする方法
毎回ターミナルを開くたびに set -o vi
を打つのは面倒ですよね。
恒久的に設定したい場合は、ホームディレクトリのシェル設定ファイルに追記しておくのが便利です。
たとえば、bashを使っている場合は ~/.bashrc
に次のように書きます:
# viモードを有効にする
set -o vi
zshユーザーなら ~/.zshrc
に同様の記述をします。
その後、設定を反映させるために source ~/.bashrc
を実行してください。
Emacsモードとの比較
操作内容 | Emacsモード | viモード |
---|---|---|
行の先頭 | Ctrl + A | 0 (ノーマルモード) |
行の末尾 | Ctrl + E | $ (ノーマルモード) |
単語単位移動 | Alt + F / Alt + B | w / b (ノーマルモード) |
前のコマンド | Ctrl + P | k (ノーマルモード) |
履歴検索 | Ctrl + R | /検索語 (ノーマルモード) |
削除 | Ctrl + D or Backspace | x (ノーマルモード) |
viモードはviエディタに慣れている人にとって非常に自然な操作感で、慣れればEmacsモードより高速な編集が可能です。
注意点と補足情報
- viモードでは、入力途中で
ESC
を押し忘れるとノーマルモードに入れないので、最初は慣れが必要です。 - WindowsのGit Bashでも
set -o vi
は有効です。ただし環境によってはキー挙動が完全に一致しない場合があります。 - ターミナルによっては、
ESC
キーの反応に遅延がある場合も。そんな時はCtrl + [
を代用するとよいです。
まとめ
set -o vi
は、Linuxのシェル操作をより快適にするための隠れた便利機能です。
viエディタのキー操作に慣れている人はもちろん、まだ使ったことがない方も、ぜひ一度試してみてください。
慣れればコマンド履歴の検索や編集が格段に効率化され、日々の作業がぐっと楽になります。
Linuxユーザーなら、知っておいて損のないテクニックです。
まずは set -o vi
を試して、ターミナルの使い心地をアップグレードしてみましょう!