皆さんの愛用テキストエディタは何でしょうか、
私はUIと保管が好きなのでVSCodeを使用しています。
近年では、Gitでのリモート開発・VSCodeの拡張でSSHが使えたりして、わざわざCUIエディタを愛用する方はほぼいなくなったように感じます。
この記事は、そんな業界情勢に反旗を翻し、今更CUIテキストエディタをデビューしたい方向けの記事です。
Vim
Vimとは
VimはCUIテキストエディタの一つで、
インサートモードとコマンドモードを用いて操作を行います。
特徴の一つとして、ユーザは.vimrcを編集することでカスタマイズを行うことができます。
Vimを使用するメリット・デメリット
- メリット
- 多くのLinuxに最初から入っている
- カスタマイズすればそれなりに使いやすい
- デメリット
- マウスポインタが利用不可なので直感的な操作ができない
- 環境によってはマウスポインタでも利用可能だが、それをするなら普通にGUIエディタを入れた方がいい
- デフォルトのUIが見にくい
- シェルやGUIに対する操作の互換性が低く、初見では扱えないレベル
- カスタマイズが有効である環境ならVim以外を利用できる可能性が高い
Vim(などのCUIエディタ)を利用する理由
- 通ぶれる
- カッコつけられる
- 玄人感
- ローカルLinux環境では使わざるを得ない
- 特にOS故障等のトラブルシュート時には、上記に該当する場合が多い
Vimをデビューする
初めに
Vimをデビューするにあたって行うべきことは大きく二つで、
- 操作方法の把握
- カスタマイズ
だと考えています。
これを行わないと、
"なんかやたら見づらい画面で、十字キーを使って必死にカーソルを移動させている変人"(私)
という、カッコよくもなければパフォーマンスも悪い最悪のパターンに陥ってしまいます。
なので、この記事では初動からそれを回避するため上記二つについてしっかり考えていきます。
Vimを開いて、文字を書いて保存する
vim <path>
でファイルを開けます。存在しないファイルは新規ファイルとして開くことができます。
ファイルを編集して保存を行う操作は、
iキーでインサートモードに入る>escで戻り、:wq!コマンドを入力し保存して終了
です。
これができれば、とりあえずパフォーマンスの悪い人になれます。
操作方法を把握する
Vim操作における概念として、
- モード...モードに応じて行える操作が変わる
- 操作キー...キー入力による操作
- コマンド...コマンドによる操作
があります。
この中から、まあ使うだろう、使えるといいだろうというものを抽出してあげていきます。
モード
- ノーマル: カーソル移動・コピペ・モード切替
- 切り替えキー: esc、ctrl+c
- ビジュアル: 文字選択
- 切り替えキー: v
- 挿入: 文字入力
- 切り替えキー: i
- コマンドライン: コマンド入力、実行
- 切り替えキー: : コマンド入力
- 切り替えキー: / 前方検索
操作キー・コマンド
- ノーマルモードの操作 #主にカーソル移動
- モード切り替えキー: ほかのモードに切り替え
- {h,j,k,l,方向キー}: 指定方向にカーソルを移動
- 0: 行頭
- $: 行末
- gg: 先頭行
- G: 最終行
- <Int>G:n行
- Ctrl+U: 上スクロール
- Ctrl+D: 下スクロール
- u: undo
- Ctrl+r: redo
- p: クリップボードのペースト
- Ctrl+0: 前のファイル履歴へ戻る
- Ctrl+i: 先のファイル履歴ヘ進む
- Ctrl+w: ウィンドウの設定
- s: 上下分割
- v: 左右分割
- {h,j,k,l,方向キー}: 指定方向のウィンドウに移動
- c: 現在のウィンドウを閉じる
- ビジュアルモード #モード移行直後のカーソル位置から選択開始
- d: 選択範囲の削除
- y: 選択範囲をクリップボードにコピー
- 挿入モード
- <方向キー>: 指定方向にカーソルを移動
- Tab: タブを挿入
- Ctrl+r: レジスタ内容を挿入
- +: クリップボード
- Ctrl+o: 一動作だけノーマルモードに移行
- コマンドモード
- :
- w: 保存
- w : ファイル名を指定
- q: 終了
- e <Path>: ほかのファイルへ移動
- split: ウィンドウを横に分割
- vsplit: ウィンドウを縦に分割
- new: 新規ウィンドウを横に作成
- vnew: 新規ウィンドウを縦に作成
- close: ウィンドウを閉じる
- w: 保存
- /
- <regix>: 正規表現検索
- n: 次のヒット箇所に移動
- :
これだけ覚えておけばまあ困らないんじゃないかと思います。
カスタマイズ
例えば、Visual Studioを開くと、特に何も設定していなくても
- タブ
- 行番号
- エンコード
など多様な情報が表示されます。
対して、Vimを初めて開くと、
- 何行目,何文字目
ぐらいで、ほとんど情報がありません。
ユーザは、~/.vimrcを編集することでVimをカスタマイズすることができます。
ちなみに、設定項目が多すぎて全部を把握するのは不可能なので、
いったん誰かのをコピペして後から不満に感じた要素を調べて追記していくのがいいかと思います。
かなり自由に設定できるのでCUI上でできることならなんでも実現可能だと思います。
いかに設定項目で良さそうなのを列挙します
- syntax {on,off}: 色分けによる構文の強調
- set: オプションの設定 #no<xxx>で無効化
- autoindent: 前行のインデントを継承する
- clipboard=unnamed,autoselect: ヤンクをクリップボードに同期
- cursorline: 現在の行を強調
- cursorcolumn: 現在の列を強調
- directory=<Path>//: swapファイルの保存パスの指定
- expandtab: Tabを半角スペースに変換
- ignorecase: 検索文字列の大文字と小文字を区別しない
- smartcase: 小文字>大文字は区別せず、大文字>小文字を区別する
- incsearch: 検索文字列入力中に順次ヒットさせる
- laststatus={0,1,2,3}: ステータスラインの表示
- 0: 非表示
- 1: ウィンドウ分割時
- 2: 常時
- list: 不可視の文字を可視化(Tabを^Iとして表示など)
- listchars=:<\\Chara>*: 種類ごとに表示形式を指定
- number: 行番号を表示
- showmatch: 括弧の対応を強調
- sidescroll<Int>: 非表示領域にカーソルが移動するとn行スクロールする
- smartindent: インデントをスマートにする
- tabstop=: 行頭でないTabの表示幅を半角スペースn個分とする
- shiftwidth=: 行頭Tabの表示幅を半角スペースn個分とする
- title: タイトルを表示する
- visualbell: ビープ音を可視化
- wildmenu: wildmenu(バーからファイルを探索)を有効化
- wrap: 折り返しを行う
- wrapscan: 検索にヒットする位置をハイライト表示
- call: 関数の呼び出し #モジュールインストールのほか複雑な動作設定時に利用される
設定後
~/.vimrc設定後のUIはこんな感じです。
初期状態よりはるかに見やすくなりました。
あとがき
vimrcはもちろんなんですが、操作においても書いていない機能(タグなど)があります。
使いこなせれば現代エディタより高速な編集ができるという派閥もいるので、ぜひ極めてみてください。
