Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

LinuxでVimをデフォルトエディターとして設定する方法

筆者は約25年間Linuxを使い続けており、その前には数年間Unixを利用していました。長年の使用の中で、日常的に使うツールへのこだわりが自然と形成されてきました。その中で最も重要なツールのひとつが、Vimエディターです。

Vimとの付き合いは、1990年代初頭にSolarisを学び始めた頃までさかのぼります。当時「Viはどんなシステムにも必ず入っている」と教わったことがきっかけでした。これは私の経験においても事実で、今でもほぼすべての環境でVi系エディターが利用できます。

もちろん他のエディターも試してきましたが、結局のところVimが自分に最も合っています。それほど頻繁に使うため、指がVimの操作を覚えてしまい、他のエディターを使っていても無意識にVimのキー操作をしてしまうほどです。

そして何より、単純にVimが好きなのです。

viコマンドとVimの関係

多くの設定ファイルではVimではなくViが使われる前提になっており、viコマンドを実行できます。ただし、多くのディストリビューションではviコマンドはvimへのシンボリックリンクです。つまり、viと打っても実際にはVimが起動しているケースがほとんどです。

また、多くのLinuxツールはNano、Emacs、Vimを呼び出す(あるいはエミュレートする)エディターを採用しています。中には、ユーザーが好みのエディターへ連携できるよう設定できるものもあります。筆者にとって影響が大きかったのは次の2つの例です。

  • Bashのコマンドライン編集:デフォルトはEmacs風
  • テキストベースのメールクライアントAlpine:デフォルトはPicoエディター

ちなみにPicoは、Alpineの前身であるPineメールクライアント向けに開発されたエディターです。

ただし、外部エディターを利用するすべてのプログラムが設定可能なわけではありません。開発者が指定したエディターしか使えないものもあります。設定できるアプリケーションについては、以下のような方法で好みのエディターを指定できます。

Bashのコマンドライン編集をVim風にする

テキストファイルの編集以外で最も編集作業が多いのが、Bashシェルでのコマンドライン操作です。Bashのデフォルト編集モードはEmacs風ですが、筆者は断然Vim派です。そこで何年も前に、コマンドライン編集のデフォルトをEmacsからVimへ切り替えました。これで格段に快適になりました。

設定方法は2通り

Bashの設定には主に2つの方法があります。

  1. ユーザーごとの設定:/home/ユーザー名/.bashrcなどを編集する。自分のアカウントにのみ反映され、同一システム上の他ユーザーには影響しません。
  2. システム全体の設定:独自の設定ファイルを作成し、/etc/profile.dディレクトリに配置する。個人アカウントとrootの両方に反映されます。

筆者は後者のグローバルな設定を好んでいます。/etc/profile.dにはインストール済みの各シェル用のファイルが格納されており、ターミナルセッション起動時に、各シェルは拡張子に基づいて自分に関係するファイルだけを読み込みます。たとえばBashは.sh拡張子のファイルのみを読みます。

筆者はここにmyBashConfig.shというファイルを作成し、以下の内容を追加しました。

<SNIP>
alias vim='vim -c "colorscheme desert" '
# Bashの編集モードにviを設定
set -o vi
# この変数を参照する全アプリのデフォルトエディターとしてviを設定
EDITOR=vi
<SNIP>

ポイントとなるのはset -o viの行です。setコマンドの-oオプションで、コマンドライン編集モードとしてvi(Vim)を指定しています。設定を反映するには、既存のBashセッションを閉じて新しいセッションを開き直してください。

これで、コマンドライン上で普段使い慣れたVimの編集コマンドがすべて使えるようになります。Escキーを押せばVim編集モードに移行します。特にお気に入りなのは、bキーを連打してカーソルを複数単語ぶん後ろへ移動できる点です。

$EDITOR環境変数で他のプログラムのデフォルトを変更

一部のLinuxコマンドラインツールやプログラムは、$EDITOR環境変数を参照して使用するエディターを決定します。現在の値は次のコマンドで確認できます。筆者は新しく構築した仮想マシンで、デフォルト値を確かめてみました。

# echo $EDITOR
/usr/bin/nano
#

Fedoraの場合、$EDITORを参照するプログラムのデフォルトはNanoエディターです。前述のスニペットにあるようにEDITOR=viの行をmyBashConfig.shへ追加すれば、デフォルトがVi(Vim)に変わります。

なお、外部エディターを使うすべてのコマンドラインプログラムがこの環境変数を参照するとは限らない点に注意してください。

Alpineのメール編集をVimに変更する

数週間前、筆者はPicoがメールエディターとして自分に合っていないと感じるようになりました。ThunderbirdからAlpineへ乗り換えてしばらくは我慢して使っていましたが、Vimのキー操作をしようとするたびにPicoが邪魔をして、生産性が下がっていました。

Alpineのヘルプを読むと、デフォルトエディターを変更できることが分かりました。Vimへ変更することにしました。手順は驚くほど簡単です。

Alpineでの設定手順

  1. AlpineのメインメニューでSキーを押してセットアップ画面に入り、続けてCキーで設定(Config)を開きます。
  2. Composer Preferences(作成設定)セクション内のEnable Alternate Editor CommandEnable Alternate Editor Implicitlyの2項目にXを付けて有効化します。
  3. 数ページ下のAdvanced User Preferences(上級者向け設定)セクションまでスクロールし、Editorの行を探します。未変更なら次のように表示されています。
Editor    = <No Value Set>
  1. カーソルバーでEditor行をハイライトし、Enterキーを押して編集状態にします。
  2. <No Value Set>vimに書き換えてEnterを押し、Eキーで終了、Yキーで変更を保存します。

以降は、メール本文の編集画面に入ると自動的にVimが起動します(Picoと同じ挙動です)。実際にVimが動いているので、お気に入りの編集機能がすべて使えます。終了時のEsc :wqの操作もそのまま通用します。

まとめ

筆者は他のどのエディターよりもVimを好んでいます。今回紹介したシステム設定の変更により、デフォルトで別のエディターを使うプログラムでも、Vimを標準として使えるようになりました。

  • $EDITOR環境変数を参照するプログラム:設定は一度だけでOK
  • Alpineのような個別設定を持つプログラム:アプリごとに設定が必要

好みの外部エディターを選べる仕組みは、「各プログラムはひとつのことをうまくやるべき」というUnix哲学の理念にぴったり合致しています。優れたエディターがすでに複数存在するのに、わざわざ新しいエディターを実装する必要はないでしょう。同時に、「お気に入りのエディターを使う」というLinux哲学の理念にもかなっています。

もちろん、デフォルトのテキストモードエディターをNano、Pico、Emacsなど、自分の好みのものに変更しても問題ありません。大切なのは、自分にとって最も快適な環境を作ることです。

  1. Linuxでプロセスを強制終了する方法!top・ps・killコマンドの使い方を徹底解説

    Linuxには、プロセスを強制終了(キル)するためのさまざまな方法があります。このチュートリアルでは、動作がおかしくなったプロセスを見つけて終了させる方法を解説します。 プロセスは簡単に「孤児」になってしまうことがあります。意図的であろうとなかろうと、親プロセスがクラッシュすると、子プロセスだけが取り残されて実行され続けることがあります。また、親プロセスが完了した子プロセスを回収(reap)できず、ゾンビプロセスになってしまうケースもあります。 どちらの状態のプロセスも放置されたままでは動けず、手動での介入が必要です。そこで登場するのがジョブコントロールです。それでは、壊れたプロセスを終了させ

  2. Linuxでディレクトリ名を変更する方法:mvとrenameコマンドの使い方

    このチュートリアルでは、Linuxでディレクトリ名を変更する方法として、「mv」コマンドと「rename」コマンドの2つの使い方を解説します。 ディレクトリ名の変更は、ファイル名の変更とほとんど変わりません。Linuxには「すべてはファイルである」という設計思想があり、ディレクトリも例外なくファイルとして扱われます。そのため、ファイルのリネームで使うテクニックの多くが、そのままディレクトリにも応用できます。 mvコマンドでディレクトリ名を変更する mv RenameDir/ renameDir mvコマンドによるディレクトリ名の変更 方法はこれだけです。シンプルにmvするだけで完了します。ただ