関連: #937 #1174
Problem
関数内で現在行のファイル先頭からの行番号を取る簡便な手段がない。
Cレベルでも、実行時の行番号は :source 中しか取れない (はず) 。
Solution proposal
ufunc_T 構造体に、定義位置の行番号を記録するフィールドを追加。
current_SID と同じように、現在の行番号を記録する変数を追加する (current_SLN) 。
関数定義時に sourcing_lnum を記録し、関数呼び出し時に current_SLN に ufunc_T から行番号を取得することで、current_SLN + sourcing_lnum が現在行の行番号になる。
この値を返すキーを eval_vars() に追加すればよい。
その他の構造体でも同様に行番号フィールドを追加し、定義時に記録することで、map や autocmd 等で定義位置の行番号を保持できる。
vim/vim@master...ichizok:wip/script_lnum
この branch では、以下の構造体を定義して各構造体の scid_T を sctx_T に置き換えている。
typedef struct {
scid_T sc_scid;
linenr_T sc_lnum;
} sctx_T;
関連: #937 #1174
Problem
関数内で現在行のファイル先頭からの行番号を取る簡便な手段がない。
Cレベルでも、実行時の行番号は
:source中しか取れない (はず) 。Solution proposal
ufunc_T構造体に、定義位置の行番号を記録するフィールドを追加。current_SIDと同じように、現在の行番号を記録する変数を追加する (current_SLN) 。関数定義時に
sourcing_lnumを記録し、関数呼び出し時にcurrent_SLNにufunc_Tから行番号を取得することで、current_SLN + sourcing_lnumが現在行の行番号になる。この値を返すキーを
eval_vars()に追加すればよい。その他の構造体でも同様に行番号フィールドを追加し、定義時に記録することで、
mapやautocmd等で定義位置の行番号を保持できる。vim/vim@master...ichizok:wip/script_lnum
この branch では、以下の構造体を定義して各構造体の
scid_Tをsctx_Tに置き換えている。