README
Extension for inserting sequential numbers and manipulating text under multiple cursors.
- insert sequential numbers with rich formatting
- run custom functions on selected text
This is inspired by Insert Numbers
and Insert Numbers (Fix)
⚠️ Warning ⚠️
This code uses JS eval
function, but only on YOUR input, so probably nothing bad can happen.
Usage
Insert
Running the command manipulatenumbers.insertNumbers
(Ctrl+Alt+N
) opens prompt to insert format:
[zfill][=][int_width][.(=|precision)][format][+][start][±step][separator][separator_interval]
zfill
- Either 0 or space (space is default). This character will be appended to the left of number (if needed by the width
).
=
- If present, all inserted numbers will be of equal width (smaller numbers will be padded with zfill
).
int_width
- Number of integer digits. If number is smaller than this, it will be padded with zfill
. This can be used along with =
above.
precision
- Either integer or =. If integer, all numbers will be rounded to this amount of decimals. If =, all numbers will have the same amount of decimals (least possible without rounding).
format
- d or D for decimal, x or X for hex, (and in future c or C for characters). x will produce lowercase c0ffee, and X will produce uppercase C0FFEE. You need this if you have anything before this.
+
- If present, positive numbers will have + in front (negative numbers always have -).
start
- integer or rational number.
±step
- integer or rational number (use + for ascending, and - for descending sequences).
separator
- Thousands separator. Either comma, space, or underscore. (TODO: add apostrophe).
separator_interval
- separator
appears every …! For decimal, default is 3, for hex 2.
Important note: if you have anything before format
, you also need format
.
Immediatelly after inserting, you will be offered to run manipulation, which you can cancel by pressing Escape or Enter.
Manipulate
Running the command manipulatenumbers.manipulateNumbers
(Ctrl+Alt+M
) opens prompt to insert expression.
Run any JS expression or function (or special command!) on selected text.
Expressions are written as if they appear right of the following arrow function:
(x: number, s: string) =>
Meaning you can either have simple expressions like x + 1
or complex functions { return x + 1; }
.
s
is text in string format, and x
is result of Number(s)
(which is NaN
if s
is not a number).
Note: This functionality uses the built-in JS eval
function (But probably nothing bad can happen).
Special commands are in format :count
.
:count
- shows how many cursors are there.
:format[xcd]#{format like above}
- format numbers (e.g. if you aren't satisfied with result of insert). xcd
is optional, it tells how should we parse numbers (decimal/hexadecimal/~~characters~~).
It is not (yet?) possible to change number base (e.g. dec to hex) (you can do that by ordinary Manipulate).
:sort[-][#expression]
- sort selections. -
for reverse. expression
is any valid JS after (s1: string, s2: string) =>
.
E.g. :sort# Number(s1) - Number(s2)
with multiple cursors on 4
, 8
, 3
would reorder them to 3
, 4
, 8
(but for numbers, see next :sortn
). (This also uses JS eval
, but probably nothing bad can happen)
:sortn[-]
- like previous, but for numbers.
:order[-]
- reorders selections internally in VSCode (so that 1st cursor in document is 1st selection). This does not change the document. -
for reverse order.
TODO: add stacking like :order :sortn :format#,2
Examples



(For manipulation, first was inserted numbers 0 to 14 (see 1st image), and then 2 ** x
)

Source
my:
original:
2nd version:
(honestly, I don't know what sections below are)
Patch/Fix Notes
- select first number group while calling this extension,avoid extra number group.
- correct to the latest standard of
TypeScript
.
- update to latest vscode API.
- update sprintf.js,remove
TSSprintf.ts
.
Changes
Enjoy!