Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?

テキストプロパティ触ってみた

2019-03-11 gorilla.vim #2 thinca

テキストプロパティ、ご存知ですか?

どんなものか知らない人も多いですよね

そこで、実際に触ってみました!

テキストプロパティとは

  • :help text-properties

テキストプロパティとは

  • 8.1 で追加される新機能
  • まだ実装中
    • 未実装の機能あり
  • テキストの範囲にプロパティを付与する
  • ハイライトを指定したりマーカーとして利用

テキストプロパティのイメージ

function hoge(arg)
         ~~~~
endfunction
  • 1 行目の 10 桁目から 4 文字分

テキストプロパティのイメージ

function hoge(arg)
         ^
endfunction
  • 1 行目の 10 桁目から 0 文字分
    • 幅 0 も可能

テキストプロパティのイメージ

function hoge(arg)
<~~~~~~~~~~~~~~~~~
endfunction
~~~~~~~~~~>
  • 複数行にまたがることもできる
    • が、まだ未実装

何が嬉しいのか

  • テキストの編集とともに移動する
    • 手前に行を足せばプロパティの位置も下へ
    • プロパティ内に文字を挿入すれば範囲が広がる
  • 今までは行+桁で記憶するしかなかった
    • 編集すると位置がずれてしまう

例えばこんな時に

  • エラー箇所をハイライト
  • プラグインが自由に使える mark の代替品
  • スニペットプラグインの place holder の管理
  • その他アイディア次第!

まだ使えない機能

(help より引用)

  • テキストを挿入するときの桁/長さの調整
  • 複数の行にまたがるテキストプロパティ
  • prop_find()
  • テキストプロパティが古くなったときのコールバック

ざっくり使い方

  1. プロパティタイプを定義する
  2. バッファにテキストプロパティを設定する
  3. 必要なら情報を取得する

プロパティタイプ

  • プロパティの性質。名前で識別する
  • "highlight" ハイライトグループ名
  • "priority" 重なった場合は大きい方を優先
  • "bufnr" 指定するとバッファローカルにできる
  • "start_incl" / "end_incl" 未実装

プロパティタイプ 定義例

call prop_type_add('my_error',
\   { 'highlight': 'ErrorMsg',
\     'priority': 10 }
\ )
  • my_error という名前のプロパティタイプを定義
  • 対象を ErrorMsg でハイライト
  • 優先度は 10

プロパティタイプ操作関数

  • prop_type_add({name}, {props})
  • prop_type_change({name}, {props})
  • prop_type_delete({name} [, {props}])
  • prop_type_get([{name} [, {props}])
  • prop_type_list([{props}])

テキストプロパティの設定

  • 開始位置とタイプを指定
  • "length" 長さ(1行の場合のみ)
  • "end_lnum" / "end_col" 終了位置
  • "bufnr" 指定したバッファに設定する
  • "id" 識別番号。必要ない場合は省略可(=0)

テキストプロパティ 設定例

call prop_add(
\   10, 5,
\   { 'type': 'my_error',
\     'length': 8 }
\ )
  • 10 行目の 5 桁目から 8 バイト分に my_error のテキストプロパティを設定する

テキストプロパティ操作関数

  • prop_add({lnum}, {col}, {props})
  • prop_clear({lnum} [, {lnum-end} [, {bufnr}]])
  • prop_find({props} [, {direction}])
  • prop_list({lnum} [, {props})
  • prop_remove({props} [, {lnum} [, {lnum-end}]])

デモ

call prop_type_add('my_error', \ { 'highlight': 'ErrorMsg', \ 'bufnr': bufnr('%') }) call prop_add(6, 35, \ { 'type': 'my_error', \ 'length': 10, \ 'bufnr': bufnr('%') })

触ってみた感想

  • バグを見つけた
    • prop_remove() の第2引数が省略できない
  • デバッグが難しい
    • 設定されているテキストプロパティを全部取る機能がない

いかがでしたか?

  • テキストにプロパティを設定できる
  • まだまだ開発中の機能
    • (最近は更新がない…みんなの反応を待ってるのかも?)
  • 要望を出すなら今のうち!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.