「定義へ移動」の版間の差分
ナビゲーションに移動
検索に移動
日付のフォーマットを変更 |
SyntaxHighlightにcopyの追加 |
||
| (同じ利用者による、間の3版が非表示) | |||
| 4行目: | 4行目: | ||
== 機能 == | == 機能 == | ||
* C 構文のソースで、変数を選択し実行することでその変数の定義部へジャンプします | * C 構文のソースで、変数を選択し実行することでその変数の定義部へジャンプします | ||
* | * JavaScript でも var を使用して宣言しておくことで、検出が可能です | ||
== 変更履歴 == | == 変更履歴 == | ||
* 2013-10-29 初版 | * 1.0.0 (2013-10-29) | ||
** 初版 | |||
== ソースコード == | == ソースコード == | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript" copy> | ||
#title="定義へ移動" | #title="定義へ移動" | ||
// ----------------------------------------------------------------------------- | // ----------------------------------------------------------------------------- | ||
// 変数定義へジャンプ | // 変数定義へジャンプ | ||
// C 構文のソースで、変数を定義している場所にジャンプします。 | // C 構文のソースで、変数を定義している場所にジャンプします。 | ||
// | // JavaScript でも var で定義されている場合はジャンプできます。 | ||
// | // | ||
// 正確な構文解析をしていないので、誤動作もしますし、次のようなパターンは検出できません。 | // 正確な構文解析をしていないので、誤動作もしますし、次のようなパターンは検出できません。 | ||
2025年6月30日 (月) 00:38時点における最新版
概要[編集]
選択した変数の定義部分へ移動します。
機能[編集]
- C 構文のソースで、変数を選択し実行することでその変数の定義部へジャンプします
- JavaScript でも var を使用して宣言しておくことで、検出が可能です
変更履歴[編集]
- 1.0.0 (2013-10-29)
- 初版
ソースコード[編集]
#title="定義へ移動"
// -----------------------------------------------------------------------------
// 変数定義へジャンプ
// C 構文のソースで、変数を定義している場所にジャンプします。
// JavaScript でも var で定義されている場合はジャンプできます。
//
// 正確な構文解析をしていないので、誤動作もしますし、次のようなパターンは検出できません。
// ・int a, b; <= これのbは検出不可。aは検出可。
// ・メンバ変数
// ・ブロックによるスコープの違い
// ・コメントやリテラルに含まれる文字列
//
// (C) ks
// http://merysmacro.seesaa.net/
// -----------------------------------------------------------------------------
var doc = Editor.ActiveDocument;
var sel = doc.Selection;
var v = sel.Text;
if (v.length <= 0) {
// カーソル位置の単語を選択
sel.SelectWord();
v = sel.Text;
}
var reg = new RegExp("[a-zA-Z0-9_]+\\*?\\\^?>?\\*?\\^?\\s+\\*?" + v + "[\\[\\(\\s\\n,;=|(/\\*)]");
for (var i = sel.GetActivePointY(mePosLogical)-1; i >=1; i--) {
var s = doc.GetLine(i, meGetLineWithNewLines);
if (s.match(reg)) {
var n = s.indexOf("//");
if (n >= 0) {
if (RegExp.index > n) {
continue;
}
}
if (s.indexOf("return") >= 0) {
continue;
}
if (s.indexOf("delete") >= 0) {
continue;
}
reg = new RegExp("\\s+" + v + "[\\[\\s\\n,;=|(/\\*)]");
s = String(s.match(reg));
n = s.indexOf(v) + 1 + RegExp.index;
sel.SetActivePoint(mePosLogical, n, i);
sel.SetAnchorPoint(mePosLogical, n + v.length, i);
Status = "";
Quit();
}
}
Status = "宣言が見つかりません";
スポンサーリンク