Skip to content

Vim script 実行時にファイル先頭からの行番号を取得したい #1178

Description

@ichizok

関連: #937 #1174

Problem

関数内で現在行のファイル先頭からの行番号を取る簡便な手段がない。
Cレベルでも、実行時の行番号は :source 中しか取れない (はず) 。

Solution proposal

  • ufunc_T 構造体に、定義位置の行番号を記録するフィールドを追加。
  • current_SID と同じように、現在の行番号を記録する変数を追加する (current_SLN) 。

関数定義時に sourcing_lnum を記録し、関数呼び出し時に current_SLNufunc_T から行番号を取得することで、current_SLN + sourcing_lnum が現在行の行番号になる。
この値を返すキーを eval_vars() に追加すればよい。

その他の構造体でも同様に行番号フィールドを追加し、定義時に記録することで、mapautocmd 等で定義位置の行番号を保持できる。

vim/vim@master...ichizok:wip/script_lnum

この branch では、以下の構造体を定義して各構造体の scid_Tsctx_T に置き換えている。

typedef struct {
    scid_T	sc_scid;
    linenr_T	sc_lnum;
} sctx_T;

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions