VimScriptざっくりチュートリアル(初回編)


10年近く Vim 使ってきていまだに習得していないのでそろそろ

目的とゴール


Vimプラグインを書けるようになりたい!

ターゲット


数年vim使ってて、プラグイン入れたり、.vimrc いじったりしてるけど、
VimScriptについては敬遠してる人

VimScriptって何?


Vimの設定を記述する為の独自言語
実態はExコマンドの羅列で、 if 等の制御構文も全てがExコマンド

何が出来るの?


Exコマンドでできること全部。引いては Vim でできること、設定できること全部

  • テキストの編集
  • 各種設定の変更
  • etc...


詳しくは以下

:help ex-cmd-index


ざっくり言えば、vimの機能拡張や、テキストの編集が出来るよ! で良いのかな?

Exコマンドって何?


Vimコマンドラインモードで実行できるコマンド群のこと
Vim起動して、 押して、以下のように入力すれば実行できる

:echo "hello!"


何でExコマンドって言うかというと、Vimの元ネタのラインエディタ ex で使えたコマンドが元になっているから

【vimの歴史】
ex(ラインエディタ) -> vi(exの機能を内包したテキストエディタ) -> Vim(viの改良版clone)


ちなみに、vi が入力モードとコマンドモードに分かれているのも、コマンドモードでは、ex の機能。入力モードでは、vi の機能という分け方をしたため

ラインエディタって?


モニターではなく1行づつコマンドの結果をプリントするテレタイプ端末というもので実行することを前提としたエディタ
なので、そういう命令を打たない限り全体を表示しないし、各種コマンドを入力することで、テキストの編集を行うエディタ


VimScriptのリファレンスとかあるの?

help usr_41

hello world

:echo "hello world"


echo は、引数の文字列を表示する Exコマンド

コメント

:echo " ダブルクォーテーションはコメント
:echo "test" " 引用符が前にあったり、いくつかのコマンドの後ろにはコメントは付けられない
:echo "test" |" こうすればどのコマンドの後ろにもコメント可(パイプは、コマンドを区切って次のコマンドに行く)

ファイルからVimScriptを実行

:source 01.vim " 拡張子は vim

変数宣言のやり方

:let test = 1   " グローバル変数(デフォルト)
:let g:test = 1 " グローバル変数(明示的)
:let s:test = 1 " スクリプトローカル変数(1スクリプトファイル内でのみ有効)
:let l:test = 1 " 関数内ローカル変数(関数内のデフォルト)
:let b:test = 1 " バッファローカル変数
:let w:test = 1 " ウインドウローカル変数
:let t:test = 1 " タブローカル変数
上にあるバッファ、ウインドウ、タブって?
  • バッファ : ファイルを編集する仮想的な領域。ファイルを開くとバッファに格納される
  • ウインドウ : バッファを編集する表示領域。:sp で分割すると2つになる
  • タブ : ウィンドウの配置の状態を保持する領域。
わかりにくいので実例
:enew    " 新規にバッファを開く
:sp      " ウインドウを分割
:tabedit " 新規にタブを生成
:tabNext " 次のタブに移動(上で分割したウィンドウが保持される)
:ls      " バッファの一覧
:tabs    " タブの一覧
変数の削除
:unlet test  " test が宣言されていないとエラー
:unlet! test " test が宣言されていなくても OK
変数の存在確認
" existsは、exコマンドではなく関数。
" echo 関数 で、関数の戻り値を echo する
" 関数については後述
:echo exists("test") |" 0:なし 1:あり
変数の再代入
:let test = 1
:let test = 2 " もう一度代入する場合は、毎回 let が必要


今日はここまで