導入編で入れた「SASIDE」の網羅的なリファレンスです。
実際の使い方の流れは使い方編を参照してください。
1. キーマップ一覧
g:saside_no_default_maps = 1 で既定割当を全停止し、<Plug> で個別に割当可。
Leader は既定の \。
ノーマルモード(ファンクションキー)
| キー |
機能 |
対応コマンド |
F2 |
Project Explorer トグル |
:SasExplorer |
F3 |
Navigator トグル |
:SasNav |
F4 |
Outline トグル |
:SasOutline |
F5 |
保存してSAS実行 |
:SasRun |
F6 |
ログペイン トグル |
— |
F7 |
.lst 表示 |
:SasLst |
F8 |
ERROR+WARNING を quickfix へ |
:SasQuickfix |
F9 |
コード整形 |
:SasFormat |
F10 |
TODO/FIXME/BUG 一覧 |
:SasTodo |
F11 |
貼り付けモード切替(vimrc設定) |
— |
F12 |
IDE一括レイアウト |
:SasIde |
ビジュアルモード
| キー |
機能 |
F5 |
選択範囲だけ実行 |
Tab / Shift+Tab
|
インデント / 逆インデント(選択維持) |
Ctrl+/ |
選択行を一括コメント化・解除 |
Alt+j / Alt+k
|
選択行を下/上へ移動 |
\d |
選択行を複製 |
Leader系(ノーマルモード)
| キー |
機能 |
対応コマンド |
\rc |
構文チェック実行(obs=0) |
:SasCheck |
\rb |
カーソル位置のブロックだけ実行 |
:SasRunBlock |
\lr |
危険NOTE抽出 |
:SasLogRisk |
\sg |
プロジェクト横断検索 |
:SasGrep |
\sd |
データセット使用箇所検索 |
:SasFindDs |
\sm |
マクロ定義/呼び出し検索 |
:SasFindMacro |
\bb |
現在行をブックマーク |
:SasBookmark |
\bl |
ブックマーク一覧 |
:SasBookmarks |
\d |
行複製 |
— |
挿入モード
| キー |
機能 |
Tab |
語中→補完ポップアップ / ポップアップ中→次候補 |
Shift+Tab |
ポップアップ中→前候補 |
Ctrl+Space |
補完を明示起動 |
Enter |
ポップアップ中→候補確定 / 空括弧内→インデント付き展開 |
Ctrl+j |
スニペット展開 / 次のプレースホルダへ |
( [ { " ' |
対応する閉じ側を自動挿入 |
Backspace |
空ペア () の内側→両方削除 |
Alt+j / Alt+k
|
行を下/上へ移動 |
SASバッファ内(ノーマル)
| キー |
機能 |
]] / [[
|
次 / 前の DATA・PROC・%MACRO へジャンプ |
% |
DO↔END、%DO↔%END、%MACRO↔%MEND、DATA/PROC↔RUN/QUIT 対応ジャンプ |
K |
カーソル下のSAS関数/PROCの辞書ヘルプ |
Ctrl+/ |
行コメントのトグル |
za / zR / zM
|
折り畳み トグル / 全展開 / 全折畳 |
特殊バッファ内
Explorer(F2)
| キー |
操作 |
Enter / o
|
ファイルを開く / ディレクトリ展開・折畳 |
a / A
|
新規ファイル / 新規ディレクトリ |
D |
削除(確認あり。ディレクトリは再帰) |
r / m / c
|
リネーム / 移動 / コピー |
u / C
|
ルートを親へ / カーソル下をルートに |
R / q
|
再読込 / 閉じる |
Navigator(F3)
| キー |
操作 |
Enter |
該当行へジャンプ |
1 / 2 / 3 / 4
|
Navigator / Outline / Dataset / Macro 表示切替 |
r / q
|
手動更新 / 閉じる |
ログバッファ
| キー |
操作 |
]e / [e
|
次 / 前の ERROR |
]w / [w
|
次 / 前の WARNING |
q |
閉じる |
2. コマンド一覧
実行
| コマンド |
機能 |
:SasRun [file] |
保存してSAS実行(F5) |
:{range}SasRunSelection |
選択範囲だけ実行(ビジュアルF5) |
:SasRunBlock |
カーソル位置のDATA/PROCブロックだけ実行(\rb) |
:SasCheck |
obs=0 構文チェック実行(\rc) |
:SasRunTerm [file] |
端末ペイン内で実行(+terminal 環境) |
:SasAbort |
実行中ジョブの停止 |
ログ
| コマンド |
機能 |
:SasLog [file] |
ログを下ペインに表示 |
:SasLst [file] |
.lst を下ペインに表示(F7) |
:SasQuickfix |
ERROR+WARNING を quickfix へ(F8) |
:SasLogErrors |
ERROR のみ抽出 |
:SasLogWarnings |
WARNING のみ抽出 |
:SasLogNotes |
NOTE のみ抽出 |
:SasLogRisk [file] |
危険NOTE を理由付きで抽出(\lr) |
ビュー
| コマンド |
機能 |
:SasExplorer |
左ペイン: ファイルツリー(F2) |
:SasNav |
右ペイン: Navigator(F3) |
:SasOutline |
右ペイン: Outline(F4) |
:SasDatasets |
右ペイン: Dataset Browser |
:SasMacros |
右ペイン: Macro Browser |
:SasIde |
IDE一括レイアウト(F12) |
編集支援
| コマンド |
機能 |
:SasFormat |
再インデント + 空白整理(F9) |
:SasNew {kind} |
テンプレート挿入(data sql sort means freq macro header) |
:SasHelp [word] |
辞書ヘルプ(K 相当) |
:AutoPairsToggle |
括弧自動補完のON/OFF |
検索・記録
| コマンド |
機能 |
:SasGrep {pat} |
プロジェクト横断検索(\sg) |
:SasFindDs [name] |
データセット使用箇所検索(\sd) |
:SasFindMacro [name] |
マクロ定義/呼び出し検索(\sm) |
:SasTodo |
TODO/FIXME/BUG 一覧(F10) |
:SasBookmark [name] |
現在行をブックマーク(\bb) |
:SasBookmarks |
ブックマーク一覧(\bl) |
:SasBookmarkClear |
ブックマーク全削除 |
:SasSessionSave [name] |
セッション保存 |
:SasSessionLoad [name] |
セッション復元 |
デバッグ用
| コマンド |
機能 |
:SasBlockInfo |
カーソル行のブロック情報を表示 |
:SasIndex |
コードインデックス全体をダンプ |
3. オプション一覧
~/.vimrc に let g:名前 = 値 で設定します。
実行系
| オプション |
既定 |
意味 |
g:saside_sas_cmd |
'sas' |
SAS実行コマンド(フルパス可) |
g:saside_sas_args |
[] |
全実行に付ける追加引数(例 ['-work','/tmp']) |
g:saside_check_args |
['-obs','0','-noreplace'] |
:SasCheck の引数 |
g:saside_run_preamble |
1 |
部分実行時に前方のLIBNAME/OPTIONS/%LETを自動付与 |
ログ系
| オプション |
既定 |
意味 |
g:saside_log_height |
10 |
ログペインの高さ |
g:saside_log_risk_patterns |
[] |
危険NOTEパターンの追加 |
危険NOTEパターンの追加例:
let g:saside_log_risk_patterns = [
\ {'pat': 'ORACLE.*disconnect', 'desc': 'DB切断(要確認)'},
\ {'pat': '独自の警告文言', 'desc': '説明文'},
\ ]
解析系
| オプション |
既定 |
意味 |
g:saside_index_maxlines |
20000 |
リアルタイム解析の上限行数 |
g:saside_debounce_ms |
300 |
解析デバウンス(ms) |
g:saside_txt_detect |
1 |
.txt のSAS自動判定 |
g:saside_txt_threshold |
3 |
判定に必要なSAS特徴行数 |
画面系
| オプション |
既定 |
意味 |
g:saside_explorer_width |
28 |
左ペイン幅 |
g:saside_navigator_width |
34 |
右ペイン幅 |
g:saside_nav_stay |
0 |
ジャンプ後もNavigatorに留まる |
編集系
| オプション |
既定 |
意味 |
g:saside_format_upcase |
0 |
整形時に予約語を大文字化 |
g:autopairs_enabled |
1 |
括弧・クオート自動補完 |
g:ide_keymaps_enabled |
1 |
Tab補完・Ctrl+/・Alt+jk等 |
その他
| オプション |
既定 |
意味 |
g:saside_project_root |
自動 |
プロジェクトルート固定 |
g:saside_state_dir |
~/.vim/.state |
状態保存先 |
g:saside_session_auto |
0 |
終了時に自動セッション保存 |
g:saside_no_default_maps |
0 |
既定キー割当を全無効化 |
4. 危険NOTE 検出パターン一覧
:SasLogRisk(\lr)が検出する既定パターンです。
いずれもERRORにならずに処理が続行し、誤った結果を生みうるものです。
| ログ中のパターン |
何が起きているか |
uninitialized |
変数が未初期化(変数名のタイプミス・定義漏れ) |
Invalid numeric/character data |
型変換に失敗し欠損値になっている |
MERGE statement has more than one data set with repeats of BY values |
MERGEでBY値が重複(意図しない結合・件数増加) |
Division by zero |
ゼロ除算(結果が欠損値) |
W.D format was too small |
桁あふれ(表示が丸められ・欠けている) |
Character values have been converted to numeric |
文字→数値の暗黙変換 |
Numeric values have been converted to character |
数値→文字の暗黙変換 |
Missing values were generated |
演算の結果として欠損値が発生 |
Mathematical operations could not be performed |
数学演算を実行できず欠損値が発生 |
has 0 observations |
出力が0件(抽出・結合条件の誤りの可能性) |
SAS went to a new line when INPUT statement reached past the end of a line |
INPUTが行をまたいだ(読み込み位置のズレ) |
LOST CARD |
入力データの欠落 |
Multiple lengths were specified for the variable |
変数長の不一致(文字列切り捨ての恐れ) |
Truncated record |
レコードが切り捨てられた |
5. スニペット一覧(Ctrl+j)
定義ファイル: ~/.vim/dict/snippets.txt(追記して自作可能)
| キーワード |
展開内容 |
datastep |
DATAステップ骨格(data / set / run) |
sql |
PROC SQL(create table … select … from) |
sortds |
PROC SORT(by / out=) |
meansds |
PROC MEANS(class / var) |
freqds |
PROC FREQ(tables) |
macrodef |
%macro … %mend
|
doloop |
DOループ |
selwhen |
SELECT-WHEN-OTHERWISE |
importcsv |
PROC IMPORT(CSV取込) |
exportcsv |
PROC EXPORT(CSV出力) |
テンプレート版(:SasNew {kind}): data sql sort means freq
macro header(プログラムヘッダコメント)
6. 補完の候補源
| 入力の先頭 |
候補源 |
メニュー表示 |
& |
このファイルで定義済みのマクロ変数(%let / %macro引数 / call symput / into :) |
[mvar] |
% |
マクロ構文辞書 + このファイルの %macro 定義(引数付き) |
[macro] [user]
|
| その他 |
SASステートメント |
[stmt] |
|
SAS関数辞書(説明付き) |
[func] |
|
PROC名辞書 |
[proc] |
|
ODS / FORMAT / システムオプション辞書 |
[ods] [fmt] [opt]
|
|
このファイルのデータセット名 |
[ds] |
|
バッファ内の既出語 |
[buf] |
辞書ファイルは ~/.vim/dict/ にあり、語<TAB>説明 形式で自由に追記できます。
-
sas_functions.dict / sas_procs.dict / sas_ods.dict
-
sas_formats.dict / sas_options.dict / sas_macros.dict
7. ファイル構成
~/.vim/
├── plugin/ saside.vim(IDE本体) / ide.vim(補完・IDEキー) /
│ autopairs.vim(括弧補完)
├── autoload/ saside/ 21モジュール
│ (parser=解析中核, run, log, layout, explorer,
│ navigator, complete, snippet, format, search, …)
├── syntax/ sas.vim / saslog.vim / saslst.vim / syntax.vim(配線)
├── ftplugin/ sas.vim / saslog.vim
├── ftdetect/ sas.vim(.sas/.txt/.log/.lst判定)
├── indent/ sas.vim
├── colors/ sasdark.vim
├── dict/ 6種の辞書 + snippets.txt
├── doc/ saside.txt(:help saside)
├── filetype.vim ftplugin.vim indent.vim ← $VIMRUNTIME欠損の補完配線
└── .state/ ブックマーク・セッションの永続化(自動生成)
8. 設計の要点
単一パーサ・複数ビュー。 SASコードの解析器は autoload/saside/parser.vim
ただ一つです。DATA/PROC/%MACRO・入出力データセット・マクロ変数を1パスで抽出した
「コードインデックス」を、Navigator・補完・ステータスライン・部分実行のすべてが
共有します。解析結果は b:changedtick でキャッシュされ、編集時は300msデバウンスで
更新。2万行超のファイルは自動でリアルタイム解析を停止します。
完全遅延ロード。 起動時に読まれるのは plugin/saside.vim(コマンドとキーの
登録のみ)だけで、各機能は初回使用時に autoload されます。
イベント駆動。 モジュール間は User autocmd ベースの pub/sub で疎結合に
連携します。saside#event#On('RunFinished', 関数) でユーザー拡張も可能です。
9. 既知の限界
- パーサは正規表現ベースで、完全な構文解析ではありません。マクロが動的に
生成するコードや %include 先の中身は追跡できません。
- ログの更新は実行完了時のみです(実行中のライブtailはしません)。
- 意味解析を要するリファクタリング(変数の安全な一括リネーム)は非対応です。
:SasGrep + :cdo での一括置換を使ってください。
- 部分実行のプリアンブル自動付与は単純な行スキャンです。
%macro 内で定義された
%let や条件分岐で切り替わるLIBNAMEは追えません。
Vim内からは :help saside でも同じ情報が引けます
(初回のみ :helptags ~/.vim/doc が必要)。