Pythonからvimを触る:バッファ編
vimbufferオブジェクト
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...]