Pythonからvimを触る:バッファ編

vim

bufferオブジェクト

import vimによって使用できる行番号nは
0=1行目である。
vimに行番号(:set number)を表示している諸兄は気を付けられたし

bufferの取得

"現在カーソルされているバッファを取得
b = vim.current.buffer

"現在選択されている範囲をバッファとして取得する
b = vim.current.range

"指定したバッファを取得
"lsで確認してもよい
b = vim.buffers[バッファ番号]

bufferの持っているオブジェクトの属性

  • b.name
    バッファのフルパスを持つ
    実態がなければ無名
  • b.number
    バッファ番号を持つ
  • b.vars[“str”]
b:strに対する読み書き
:let b:anko = "aiueo"
:py print b.vars["anko"]
代入もできる
:py b.vars["anko"] = "str"

"vim.eval("b:xxx")でもできるが。
  • b.options
"bufferに対するoptionを設定する
:py b.options["fileformat"] = "dos"
"optionを削除
:py del b.option["option"]
  • b.valid
    bufferの状態を得る?
    bdではTrueのまま。
    bwではFalseになる。読み込まれているかどうかだと思われる

bufferの持っているメソッド

  • append
:py b.append(str,n)

"バッファの最終行に一行を追加
append(str)
"n行目の後に追加
append(str,n)
"listを追加
append(list)
append(list,n)

"vimscriptのcall appendと引数が逆
"後述のレンジバッファにも使える
  • del
:py del b[n]

n行削除
del b[n]
nからm行まで削除
del b[n:m]
すべて削除
del b[:]
  • mark
:marks
"マークの位置を示す(line,col)の組を返す
py print b.mark('a')
  • range
    レンジオブジェクトを生成する
:py b = vim.current.buffer
"cはbのn-m行目のバッファである
:py c = b.range(n,m)

"選択範囲からレンジオブジェクトを作る
:py c = vim.current.range

"もとのbに変化があればcでえられる行内容にも変化がある。

"レンジの最初の行が本体(b)の何行目かを取得
c.start
"
c.end

表に表示されているバッファを切り替える

vim.current.buffer = vim.buffers[n]

ほかにできること

"n行を出力
:py print b[n]
"n~mをリストで取得
"listなので代入してもバッファに変化は起きない
:py aaa = b[n:m]
:py print aaa[0]

"行数を取得
:py print len(b)

"nに挿入(上書き)
:py b[n] = str
"n行目からmまで削除してstrを挿入していく
:py b[n:m] = [str1,str2,str3,st...]

if_pyth-Vim日本語ドキュメント