VimScriptざっくりチュートリアル(バッファ編集編)


やっとこさ、エディタのスクリプトらしい話

行操作

行取得
echo getline('.')   |" カレントバッファのカレント行を取得
echo getline(4)     |" カレントバッファの4行目を取得
echo getline(4,8)   |" カレントバッファの4〜8行目をリストで取得
echo getline(0,'$') |" 先頭〜行末まで取得
行更新
call setline('.', 'abc')          |" カレントバッファのカレント行を 'abc' に変更
call setline(4,   'abc')          |" カレントバッファの4行目を 'abc' に変更
call setline('.', ['abc', 'def']) |" カレントバッファの4〜5行目を配列の内容に変更
行追加
call append('.', 'abc')          |" カレントバッファの下行に、'abc' を追加
call append('.', ['abc', 'def']) |" カレントバッファの4〜5行目を配列の内容に変更
行削除


直接行を削除する関数は無いらしい
delete コマンドがあるのでそれを使う

:4,5delete " 4〜5行目を削除
:.delete   " 現在行を削除

" 変数を使って3行目を削除
:let len = 3
:execute len . "delete" |" execute は、文字列をExコマンドとして実行するExコマンド
行検索
echo search("text") |" 引数(正規表現)にヒットする行を返す

バッファ操作

バッファ検索
echo bufnr('bufname')     | " 対象のバッファ名のバッファ番号を検索。なければ -1
echo bufnr("%")           | " カレントバッファのバッファ番号を取得
echo bufname(bufnum)      | " 対象のバッファ番号のバッファ名を取得
echo bufexists(bufnum)    | " 対象のバッファ番号が存在するか確認

echo bufwinnr(buf_number) | " 対象のバッファ番号が存在するウィンドウ番号を取得(ウィンドウを分割している場合に使用する)
バッファ作成
:enew `=bufname` |" 空のバッファを作成(バッファ名は、変数 bufname)して、カレントウインドウをこのバッファに変更
:new `=bufname`  |" ウィンドウを分割した後に enew を実行
:10new           |" 新規バッファをウインドウを分割して作成(高さは10行)
ウインドウ、バッファ移動
:execute bufnr(bufname).'buffer'             | " カレントウインドウを、変数 bufname に格納しているバッファに変更
                                               " :Nbuffer で、カレントバッファを、N 番のバッファに変更する
:execute bufwinnr(bufnr(bufname)).'wincmd w' | " 変数 bufname を開いているウィンドウに移動
                                               " :Nwincmd w で、N 番のウィンドウに移動
バッファの属性を操作


:setlocal は、カレントバッファに対して、オプションを設定する
スクリプトの実行結果を表示する領域によく設定するオプションの例

:setlocal buftype=nowrite     |"バッファの内容を保存しない
:setlocal noswapfile          |"スワップファイルを作成しない
:setlocal bufhidden=wipe      |"バッファがウィンドウ内から表示されなくなったら削除
:setlocal nonumber            |"行番号を表示しない
:setlocal nowrap              |"ラップしない
:setlocal nocursorline        |"カーソル行をハイライトしない
:setlocal nocursorcolumn      |"カーソル列をハイライトしない
:setlocal readonly            |"読み込み専用

カレントウインドウ、カレントバッファについて


似て非なる概念


カレントウインドウ

  • 現在操作対象になっているウインドウ
  • ウインドウは通常1つなので、表示されているウインドウ = カレントウインドウ
    • sp コマンド等でウインドウが複数になる場合に、必要になる概念

カレントバッファ

  • 現在操作対象になっているバッファ。