楽しいハックを使って、テキストエディタを次のレベルに引き上げましょう。
Vim は最もポピュラーなテキストエディタの一つです。どこにでもある コマンドラインテキストエディタを使って、ファイルを開き、テキストを入力して編集し、編集したファイルを保存してプログラムを終了するだけでも、大きなメリットがあります。
Vim が重宝される場面は、ほとんどの場合、リモートシェル操作を実行するタスクに関係していることがわかるでしょう。例えば
$ ssh user@hostname.provider.com
仮想プライベートサーバやローカルの仮想コンテナで作業している場合、これらの強力なVimスキルが大いに役立ちます。
Vimをデフォルトのテキストエディタに設定
Vim はほとんどすべての最新 Linux ディストリビューションでターミナルエミュレータのシェルコマンドプロンプトから使うことができ、一度 Vim をユーザシェルプログラムのデフォルトエディタとして定義すれば、使い慣れた Vim のキーバインドを使ってビルトインユーティリティをナビゲートすることができます。ここでは、macOS ユーザーのデフォルトシェルである Bash と Z シェルを使って、この方法を説明します。
BashでVimをデフォルトに設定
Bashはポイントファイルを組み合わせて設定を管理します。最も一般的なのはホームディレクトリの .bashrc ファイルにエディタを追加する方法ですが、.bash_profile に追加することもできます。
~/.bashrc 以下を追加して、Vimをデフォルトのエディタに設定します:
# set default editor to Vim
export EDITOR=vim
zshでVimをデフォルトに設定
zsh は、特にアップルの FreeBSD ベースの Darwin システムが最近 Bash から zsh に切り替えたので、ますます人気のあるターミナル・エミュレータです。
zshのポイントファイルはBashのものと同等なので、~/.zshrcか~/.zprofileのどちらかを選択できます。いつどちらを使うかについては、 zshのドキュメントを参照してください。
デフォルトに設定してください:
# set default editor to Vim
export EDITOR=vim
Vim の設定の最適化
Vim は端末エミュレータシェルと同様、ドットファイルを使って個人設定を行います。このパターンを見つけた人は、それが ~/.vimrc であることを推測したことでしょう。
最初に変更したい設定は、従来の Vi 互換モードを「オフ」に切り替えることです。Vim は Vi のスーパーセットであるため、Vi のすべての機能が Vim でも利用でき、Vim では大幅に改善されているため、多くの高度な機能を利用できます。最新バージョンでは、ターミナルをサブプロセスシェルとして分割ウィンドウで開くことができます。
ちなみに、明示的にオフに切り替えても、従来の Vi との互換性にはあまり効果がないようです(実際、おそらく効果はないでしょう)。Vim は .vimrc ファイルを見つけると、こっそり自動的に互換モードをオフに切り替えます。しかし、明示的にオフにすることが重要な場合もあります。nocp という略語は nocompatible の同義語で、同じことをします。すべての道はローマに通ず、環境設定を切り替える方法はたくさんあります。
Vi互換性をオフにするには、 # set default editor to Vim ファイルに以下を追加します:
" ensure that legacy compatibility mode is off
" documentation: <http://..//.ml\#'>'
set nocp
パターンを理解する
Vim における「モード」の概念は非常に重要で、特に「通常モード」と「挿入モード」の違いが重要です。モードに関する混乱はほとんどの新規ユーザにとって問題です。モードは Vim 独自のものではなく、Vi によって導入されたものでもありません。コマンドモードは 1970 年代のコピー&ペーストの発明よりも古いものです。
重要なパターン
Vim はキーボードのキーストロークの動作を定義するために様々なモードに依存しています。理解すべき重要なモードは
- 通常モード:デフォルトのモードで、主にナビゲーションとファイルを開くために使用されます。
- 挿入モード: Vim が開いているファイルにテキストを入力するモードです。
- ビジュアルモード:コピー、編集、置換など、マウスを使った入力と同じように動作します。
- コマンドモード:Vimでより多くのことを行うための強力な方法です。
Vimtutorを使えば、カーソルの移動やモード、エンドラインモードでのExコマンドの実行などをインタラクティブに学ぶことができます。 すべての道はローマに通ず、カーソルの移動、モード、エンドラインモードでの Ex コマンドの実行をインタラクティブに学ぶことができます。生産性に欠かせない演算子には以下のようなものがあります:
| :E | ファイルやディレクトリを検索するためのエクスプローラを開きます。 | 
| . | 繰り返される編集操作。 | 
| ; | 前の動作を繰り返す、または前に進む | 
| , | 前の動作や動きを逆に繰り返します。 | 
| / | ドキュメントを前方に検索します。 | 
| ? | ドキュメントの逆方向検索 | 
| * | カーソルが置かれている場所で、次に出現する単語を検索します。 | 
| # | カーソルのある場所に最後に出現した単語を検索します。 | 
| ~ | トグルケース | 
| % | ()、[]、{}の記号の開閉を切り替えます。 | 
| z= | スペルの提案 | 
ピアノのように弾く ヴィム
Vim の演算子「言語」を記憶することは重要ですが、それを習得する上で難しいのは、Vim をピアノのように演奏できるように、演算子やアクションを「和音」に組み合わせるミュージシャンのような考え方を学ぶことです。Vim のテキスト操作能力は、もう一つの有名なコマンドラインエディタである Emacs に匹敵します。
キーの「和音」を説明するとき、Vim では Ctrl キーを大文字の C とハイフンで表すのが伝統的です。これは普遍的なものではありませんが、今後はこの慣例に従います。
Vim で長い行を入力する場合、改行を許可するように設定します。Vim を自分の作業スタイルに合わせてカスタマイズするために、次の設定を考えてみましょう: デフォルトでは、Vim の起動時にテキストの改行をどのように処理しますか?オンですか、それともオフですか?私はこの設定をオフにして、実行コマンドファイルの外側に残しておきたいと思います。テキストを自動的に折り返したいときは、コマンドラインモードの :set wrap で設定します。
Vim がデフォルトで行を自動的に折り返すように設定されていても何も問題はありません。同様に、ペースト、コード言語のインデント構文、Tab キーの設定もコントロールできます。デフォルトの動作に関するこれらのオプションはすべて設定や変更が可能で、コマンドラインモードで操作しながらリアルタイムに変更することができます。
Vim のデフォルト設定に関するアドバイスはコミュニティフォーラムや Vim wiki、記事などにたくさんあります。Vim も例外ではありません。設定を簡単に元に戻せるように、まずはごく小さな変更から始めて、徐々に他の変更も加えていくことを強くお勧めします。そうすることで、プラグインを避けたり、まったく使わなかったりすることを何年も続けることができます。
Vim 8.2 のスプリット、ラベル、ターミナル
作業中のファイルを異なるビューに分割するには、2つの方法があります: 並べて表示する方法と、アプリケーションタブを使用してフルスクリーンで切り替える方法です。アプリケーション・ウィンドウのこれらの変更はコマンド・モードから行います。
各分割ウィンドウには編集用のファイルを1つずつ保存でき、タブで自由にファイルを切り替えることができます。スプリットスクリーンのスペースは限られているので、より多くの画面を分割したい場合はタブが便利です。どのように設定するかは、純粋に個人の好みの問題です。ウィンドウを水平に分割する場合は:spを、垂直に分割する場合は:vsを使います。
からは :vert term を使って垂直方向に分割されたターミナルシェルサブプロセスを開くことができます。ターミナルプロセスを閉じるには、シェルセッションを終了するのと同じように exit をタイプする必要がありますが、この分割ウィンドウとタブは通常の Vim ウィンドウを閉じるのと同じように :q で閉じます。
タブを初期化するには、特別な編集コマンド:tabeditを使います。このコマンドに引数としてファイル名を与えると、ファイルを開いて編集します。引数としてファイル名を与えなかった場合は、通常の Vim ウィンドウと同じように、コマンドラインモードで編集コマンド :e filename.txt を使うことができます。タブ間の移動には next コマンドと previous コマンドを使用します。
split を使うには、キーの組み合わせ C-w と、左、下、左、右など移動したい方向の移動キーの使い方を知っている必要があります。キーの組み合わせについて詳しく知りたい場合は、Vim マニュアルの :help split と :help tabpage を読んでください。
ヘルプ





