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
  • このエントリーをはてなブックマークに追加

PAGE TOP