この記事は公開から3年以上経過しています。
過去のエントリで紹介したVSCode Macros拡張を使って選択範囲の行先頭に行番号を挿入するシンプルなマクロ関数サンプルを作ってみましたので、紹介します。
動作イメージ
行番号を挿入したい行を選択した状態でこのマクロを実行すると行番号入力プロンプトを表示し、入力した数値を開始値とする行番号を各行の先頭に挿入します。
仕様:
- 行番号フォーマットは
数値
+.
+半角スペース
です。 - マルチセレクションには非対応です。
- 行番号挿入処理は同期実行です。
- エラー処理などは殆ど行っていません。
マクロのサンプルソースコード
※マクロコンフィギュレーション部分のマクロ名と順番は、現在お使い頂いているマクロファイルに合わせてご利用ください。
const vscode = require('vscode');
/**
* マクロコンフィギュレーション
*/
module.exports.macroCommands = {
行番号の挿入: {
no: 1,
func: insertLineNumbers,
},
};
/**
* 行番号の挿入
*/
async function insertLineNumbers() {
const editor = vscode.window.activeTextEditor;
if (editor) {
const document = editor.document;
const selection = editor.selection;
const text = document.getText(selection);
if (text.length > 0) {
const firstLineNumberAsString = await vscode.window.showInputBox({
value: 1,
prompt: 'Please enter the start line number.'
});
if (firstLineNumberAsString === undefined)
return 'Cancelled.';
let firstLineNumber = parseInt(firstLineNumberAsString);
if (isNaN(firstLineNumber))
return 'Invalid line number.';
editor.edit((editBuilder) => {
let resultText = '';
let currentLineNumber = firstLineNumber;
// 先頭行に行番号を追加
resultText += formatLineNumber(currentLineNumber++);
for (let code of text) {
resultText += code;
if (code === '\n') {
// 改行コードの後ろに行番号を追加
resultText += formatLineNumber(currentLineNumber++);
}
}
// 選択範囲を行番号付きテキストに置換
editBuilder.replace(selection, resultText.toString());
});
}
}
// 行番号をお好みのフォーマットに変換
function formatLineNumber(lineNumber) {
return `${lineNumber}. `;
}
}
以上です。