VIMをカスタマイズしてみる【第2回】
vimについて
vimで独自の function を作成する場合
vimrc に以下のように記述すると、ノーマルモードで hw と実行することで、
ステータスバーのところに、 hello world という文字を出力することができる
function! Hello() echo 'hello world' endfunction noremap <Plug>(hw) :<C-u>call Hello()<CR> map hw <Plug>(hw)
上記の map のところを noremap にしてしまうと、function が呼び出せずに何も実行されないので注意すること
変数などを使う場合
また以下のようにすると現在のスクリプトファイル内でのみ使えるローカル変数を定義できる
この場合もノーマルモードで hw と入力すると hello world という文字列がステータスバーのところに表示される
function! Hello() let s:mes = 'hello world' echo s:mes endfunction noremap <Plug>(hw) :<C-u>call Hello()<CR> map hw <Plug>(hw)
スクリプトファイル内でのみ使用できるローカル変数の定義の仕方は以下のように記述する
let s:変数名 = 値
これ以外にも下記のような変数の定義の仕方がある
l:変数名 function内のローカル変数
b:変数名 バッファ内でのみ使用可能な変数
w:変数名 ウィンドウ内でのみ使用可能な変数
g:変数名 グローバルで使用可能な変数
v:変数名 VIMが使用する特殊な変数
条件分岐やループ処理について
例えば以下のようにすると、function内で条件分岐やループ処理を行うことができる
下記の場合はノーマルモードで cu と入力すると、functionの処理が実行される
vimrcに以下を記述する
function! Countup() let s:count = 0 while s:count < 10 if s:count == 5 echo 's:countは現在 5 です' endif echo "現在は".s:count."です" " 1プラスする let s:count += 1 endwhile endfunction noremap <Plug>(cu) :<C-u>call Countup()<CR> map cu <Plug>(cu)
出力結果
現在は0です 現在は1です 現在は2です 現在は3です 現在は4です s:countは現在 5 です 現在は5です 現在は6です 現在は7です 現在は8です 現在は9です
もしスクリプトがループをしてしまった場合
ループを止めるには ctrl + c
functionの呼び出し方
以下のようにすると function を呼び出すことができる
function名は大文字小文字は区別されるので注意する
call Countup()
もしくは function を実行した結果(戻り値)変数に残す場合は
let aaa = Countup()
letは変数を定義する
let i = 1
変数を削除するには下記のようにする
:unlet i
vimスクリプトの実行の仕方
ファイルに記述したvimスクリプトを実行したい場合は下記のようにする
vim -S vim-script-name.vim