はじめに
私は現在ITスクールRareTECHにて学習しているIT学習歴7ヶ月のひよっこです。
Vim歴6ヶ月のひよっこVimmerです。
今回が初投稿となりますので、お手柔らかにお願いします。
この記事を書こうと思ったきっかけ
最近ようやくターミナル操作に慣れ始めて、ふと思ったことが、
なぜシェルのキーバインドはEmacs寄りなのかと。ならばviもあるのかと。
調べてみるもんですね。ちゃんとありました。
そこで今回、私と同じ疑問を持たれた方に向けて記事を書くことにしました。
bashのviモードとは
bashのviモードとは、GNU Readline Libraryの機能をvi風に割り当てたショートカット群です。
Readlineとは、ユーザが入力中の行を編集するためのものです。
例えば、単語単位で入力した文字を消す機能や、カーソル行をターミナルの一番上にする機能とかがあります。(clear
コマンドとは別物です。)
viモードの設定方法
方法A
-
現在の設定を確認
ターミナルで下記のコマンドを実行set -o | grep -E 'emacs|vi'
出力例
emacs on vi off
デフォルトでは上記のようにviがoffになっているかと思います。
-
次にターミナルで下記を実行
set -o vi
- 再度設定を確認
set -o | grep -E 'emacs|vi'
出力例
emacs off vi on
上記のようにviがonになっていたらOKです。
これでviの操作ができるようになっています。
操作が切り替わっていない場合はターミナルを再起動してください。
初期状態はinsertモードですので、まずEsc
を押してからj
, k
など試してください。
方法B
.bashrc
に書く
-
~/.bashrc
を開くvi ~/.bashrc
-
下記を追記
set -o vi
-
設定を反映
source ~/.bashrc
方法C(おすすめ)
-
ホームディレクトリに
.inputrc
を作成(または編集)vi ~./inputrc
-
下記を追記
set editing-mode vi
-
設定を反映
設定を反映するには一度シェルを再起動するか、下記を実行bind -f ~/.inputrc
あとは方法Aと同じ手順で確認作業をしてください。
おまけ
これでターミナルでの作業をvi操作で行うことができますね!
しかしこのままでは、insertモードかnormalモードか分からないですね。
-
そこで下記を
.inputrc
に追記してください。set vi-ins-mode-string "\1\e[32m\2🅘 \1\e[0m\2" set vi-cmd-mode-string "\1\e[35m\2🅝 \1\e[0m\2"
-
設定を反映
設定を反映するには一度シェルを再起動するか、下記を実行bind -f ~/.inputrc
-
下記は私の設定です。
# .inputrc # 基本設定 #--------------------------- # viモード有効化 set editing-mode vi # 連続キーの受付猶予 set keyseq-timeout 500 # Tabで候補を表示 set show-all-if-ambiguous on # 補完時に大文字小文字を無視 set completion-ignore-case on # ディレクトリの"/"補完 set mark-symlinked-directories on # 補完候補全表示 set page-completions off # 補完候補に色付け set colored-stats on # コピペ時にEnterが押されてコマンドが実行されるのを防ぐ set enable-bracketed-paste on # プロンプトにモードを自動表示 set show-mode-in-prompt on # 表示する文字列 set vi-ins-mode-string "\1\e[32m\2🅘 \1\e[0m\2" set vi-cmd-mode-string "\1\e[35m\2🅝 \1\e[0m\2" #--------------------------- # キーマップ #--------------------------- # normal mode $if mode=vi set keymap vi-command # <S-h>行頭<S-l>行末 "H": beginning-of-line "L": end-of-line # gu / gU -> 小文字化 / 大文字化 "gu": downcase-word "gU": upcase-word # n -> 履歴のインクリメンタル検索 "n": history-search-backward # N -> 直前の検索と逆方向へ "N": history-search-forward # insert mode set keymap vi-insert # jjでnormal mode "jj": vi-movement-mode # <C-l>で画面クリア "\c-l": clear-screen #--------------------------- $endif
おわりに
より細かな設定がしたい方はこちらのArchWikiをご参照ください。
参考記事 : bash を viモードで使うことにした
以上、最後まで読んでいただきありがとうございました!
間違い等ございましたらコメントいただけると幸いです。