►
Description
Today we took a look at multi cursor refactors. Multiple cursors can be a super powerful tool for making complex changes at once without risking a typo. VSCode has great multicursor support, but many other IDEs do as well.
A weekly stream focused on Insomnia's open source community.
Join us on the #stream channel over on the Insomnia community slack: https://chat.insomnia.rest
A
B
B
B
If
you
go
to
that,
url
you'll
be
able
to
join
the
insomnia
community
slack
and
from
there
there's
a
channel
called
stream,
and
you
can
go
on
that
channel
and
all
the
information
you
need
to
access.
The
stream
is
going
to
be
there,
including
coming
on
the
stream.
We've
had
lots
of
people
from
the
open
source
community
and
just
around
the
world
come
on
the
stream
they
they
educate
me
on
my
lac,
I'm
american,
so
my
geography
of
the
world
is
very
poor,
so
they
educate
me
on
where
different
countries
are
it's
been
fun.
B
I
want
to
talk
also
on
the
screen.
Here
is
about
how
the
stream
is
organized
and
created
it's
completely
open
and
done
in
full
view
of
the
public,
everything
that
there
is
to
do
with
what
the
stream
is,
how
it's
planned,
how
we
decided
what
time
to
pick
what
audiences
it's
for,
including
the
priorities
of
what
we're
gonna
do.
B
Second
priority
is
we
have
a
stream
label
on
github
and
we
use
that
label
to
ask
ourselves
throughout
the
week.
Is
this
something
would
be
useful
to
talk
about
on
the
stream
and
if
it
is,
then
we
talk
about
it
here
and
we
go
through
those
pr's
and
try
to
merge
them.
It's
always
great.
If
we
can
merge
something
on
stream,
then
we
have
our
community
slack
questions
and
also
github
issues,
anything
that
somebody
brings
up
so
sometimes
we'll
just
go
through
issues.
We've
done
that
before.
B
I
hope
we
do
it
again
soon,
because
it
was
really
fun
and
yeah
all
this
stuff
about
how
to
how
to
actually
back
of
house
things
but,
like
I
said
it
really
is
done
in
the
open.
So
that's
that,
let's
see
so
today
we
were
thinking
about
something
that
is
pretty
cool.
That
was
happening.
B
There's
some
great
work
being
done
right
now
on
key
bindings
and
shortcuts
in
insomnia.
So
this
is
james
here.
One
of
our
team
members
has
a
really
cool
pr
up.
Trying
to
replace
this
thing
called
key
down
binder
that
we
have
a
component
that
we
made
in
our
app
with
hooks.
This
has
been
impossible
until
pretty
recently
there's
been.
B
You
know,
like
many
react
projects
we're
going
through
the
motions
over
a
multi-year,
long
timeline
to
change
from
class
components,
react,
class
components
into
hooks
and
function,
components,
and
it's
not
possible
to
use
hooks
in
a
class
component
without
well
like
wrapping
it
with
a
function
component
or
something
like
that.
You
have
to
do
some
hackery
to
get
that
to
actually
function,
so
we've
been
kind
of
blocked
on
actually
improving
this
for
a
while,
but
recently
there
might
be
some
here
even
on
the
list.
B
Like
anything,
you
see
arrow
fc,
rapper
class,
fc,
model
class
fc.
These
are
by
jack,
but
all
the
members
of
the
team
have
been
putting
in
effort
trying
to
get
some
of
our
components
wrapped
or
into
function,
components
from
class
components.
Some
of
them
are
harder
than
others,
but
we're
getting
there,
and
we
realized
recently
that
key
downbinder
might
be
able
to
actually
do
something
with
it
now.
B
But
what
I
wanted
to
show
was
a
cool
refactor
that
I've
actually
done
before
I've
done
it
like
three
times,
but
I
did
it
in
the
context
of
other
pr's
and
some
of
those
pr
well
all
of
those
pr's.
I
guess
never
got
merged
or
we
dropped
that
commit
for
some
reason
or
another,
and
it's
not
a
big
project,
but
I
thought
it'd
be
a
cool
thing
to
show.
B
It
involves
multi-cursor,
so
we're
going
to
get
a
little
bit
a
far
afield
for
just
a
moment
of
from
insomnia
itself
and
talk
about
general
development
stuff.
But
it's
it's
about
multi-cursor,
editing.
So
a
cursor
right
is,
I
mean
see
if
I
can
make
this
like
super
big,
because
we
don't
really
need
a
lot
of
space
to
talk
about
what
we're
going
to
talk
about.
So
the
cursor
is
this
blinky
guy
right
and
it's
right
now,
it's
after
shift
and
boolean
here.
So
I
can
move
the
cursor
around.
With
my
with
my
keyboard.
B
I
use
it's
funny.
You
know
I
have
a.
I
can't
show
you
because
it's
well,
I
can
unplug
it
here.
Let
me
unplug
it.
I
have
a
nice
quickie
keyboard
that
I
use
every
day,
except
that
I
don't
use
it
every
day.
What
I
use
instead
is
this
guy.
This
is
a
25
like
mac
mini
keyboard,
clone.
I
use
linux
of
course,
and
so
I
I
use
this
a
lot
because
the
reason
I
have
it,
it's
just
a
little
cheap
thing
that
I
can
use
during
meetings.
B
You
know
like
I
work
remotely
like
most
of
us
and
I
I
can't
have
my
my
clicky
keyboard
making
sound
during
a
meeting.
If
I
want
to
take
notes
or
something
like
that.
So
that's
why
I
I
own
this,
but
honestly
I
I
almost
exclusively
use
it
and
there's
a
really
key
reason.
B
Let's
see
if
I
can
like,
I
know,
we're
getting
again,
I
promised
we'll
we'll
return
to
insomnia
for
just
a
moment,
but
I
want
to
show
why,
like
this
kind
of
ergonomic
stuff,
really
does
matter
and
we're
not
going
to
get
nerdy
about
keyboards,
but
I
just
want
to
show
what's
on
what's
over
here:
is
it
on
the
arrow
keys?
It
says
end
home,
page
up
and
page
down
right
and
then
over
here
I
have
a
function
key
and
I
can
hold
that
function,
key
to
trigger
and
home
page
up
and
page
down.
B
That
is
the
number
one
reason
why
I
chose
to
to
use
this
keyboard
on
a
daily
basis.
That's
what
I
like
about
it
and
I'm
going
to
show
you
why
and
it's,
because
I
do
a
lot
of
multi-cursor
stuff
when
I
code.
So
if
I
wanted
to
change,
let's
say
I
wanted
to
change
all
of
the
all
of
these
things
here
that
are
in
this.
You
know,
control,
alt,
shift,
meta
and
key
code.
I
wanted
to
change
all
these
things
that
are
in
this
interface.
B
I
can
do.
I
can
do
alt
shift
on
my
keyboard,
so
I'm
I
clicked
on
key
code
and
then
I'm
gonna
on
line
nine
and
then
I'm
gonna
do
alt
shift
and
then
I
can
click
on
to
line
five
and
now
I'm
just
gonna
type.
Actually,
you
know
what
sorry
vs
code
has
a
cool
thing
that
we
can
use
for
this.
It's
called
pres
a
screen,
s-e-r-e-e-n
presenter
mode,
nope.
B
Screencast
mode,
that's
what
it
is!
Okay,
so
now,
when
I
type
things
on
the
screen,
you're
gonna
see
what
I'm
actually
typing.
So
hopefully
this
will
be
really
clear.
What's
gonna
happen,
so
in
this
key
combination
interface,
I'm
gonna,
I'm
gonna
click
on
line
nine.
Oh
you
even
see
a
little
red
red
red
circle,
that's
nice!
So
I'm
gonna
click
on
line
nine
and
then
I'm
gonna
do
alt
shift
and
click
on
control.
B
It's!
Okay!
If
we
pick
the
wrong
things,
it's
called
it's
called
control,
but
I'm
gonna
click
on
line
five
and
the
third
column
of
line
5
there,
and
now
I
have
a
blinking
cursor
that
spans
a
large
space.
B
So
if
I
type
like
the
letter
a
on
my
keyboard,
I'm
going
to
be
adding
all
of
the
lines
that
I
have
in
my
cursor,
I'm
going
to
be
adding
stuff
too,
but
there
are
some
key
commands
that
a
lot
of
people
don't
use
as
much
as
they
should,
because
they're
really
useful,
and
one
of
them
is,
if
I
do.
If
I
hold
control
and
I
hold
shift,
oops
caps
lock
forget
about
caps
lock.
Where
are
you
capslock
anyway?
B
It
doesn't
matter
if
I
hold
ctrl
and
shift
and
then
left
arrow
you're
going
to
see
that
it
selected
all
of
that,
a
stuff
that
I
just
created
and
then
I
can
just
hit
backspace
and
delete
it,
but
that
actually
that
control
thing
is
sense.
It's
context
sensitive.
It's
not
just
you
know
going
a
certain
number
of
characters.
It's
going
to
the
next
thing,
so
let's
say,
for
example,
I
wanted
to.
B
I
wanted
to
grab
all
of
these
things
here
that
I
have
in
my
multi-cursor.
I
could
do
control
shift
and
then
right
arrow,
and
you
see
that
on
every
single
line
it
selected
a
different
number
of
characters.
B
The
thing
that's
important
here
is
that
you
can
start
using
this
stuff,
that's
selected
as
some
piece
of
information.
So,
for
example,
let's
say
I
wanted
to
add
js
docs
to
all
of
these
things,
but
I
wanted
to
use
these
names.
I
can
do
ctrl
c
to
copy
left
arrow
to
go
to
the
beginning
of
the
line
I
can
hit
enter.
B
I
typed
describes,
and
now
I
have
like
a
boilerplate
of
how
I
might
talk
about.
You
know
this
particular
item
in
this
case
with
jsdoc
when
you
hover
over
a
thing.
It
shows
you
so
over
where
my,
if
you
can
see
my
mouse
over
where
it
says
key
code
here,
it
shows
me
the
name.
So
I
don't
really
it's
not
really
a
great
thing
to
to
put
here.
But
my
point
is:
is
that
I
can
hit
ctrl
v
and
it's
going
to
copy
it's
going
to
paste.
B
Sorry,
it's
going
to
paste
the
things
that
were
in
my
multiple
cursor
view.
Do
you
know
what
I
mean
of
the
universe,
the
thing
that
I
have
a
multi-cursor
copy,
so
I
can
do
ctrl
shift
k
which
will
delete
the
line
that
your
cursor
is
on
and
now
I'm
back
where
I
started,
and
usually
it
can
be
really
nice
to
move
around
lines
this
way.
So
I
was
showing
you
my
keyboard.
B
The
reason
I
was
showing
you
that
is
that,
like
what
about
this
situation
that
I'm
in
here
now,
if
I
go
one
more
character
to
the
right
notice,
that
on
the
it
just
just
so
happens,
that
boolean
is
one
character
longer
than
number
so
now
my
my
multi-cursor
is
kind
of
screwed
up,
because
I
want
to
just
be
on
the
end
of
every
line,
but
I
can't
be
on
the
end
of
every
line.
If
I
go
one
arrow
further
on
line
10,
I
have
a
cursor,
but
I
don't
want
that.
B
I
want
the
cursor
to
be
on
line
nine
and
I
want
all
those
ones
to
be
on
the
end.
So
there's
two
more
short
little
things
that
I
want
to
show
you.
The
first
is
that
if
you
use
your
home
and
end
keys,
they'll
take
you
to
the
beginning
and
end
of
the
line.
So
if
I
do
like
function
end,
it's
going
to
take
me
to
the
end
of
the
line.
If
I
do
function
home
well,
for
me
it's
just.
B
I
have
function
key,
but
if
you
do
home
and
your
keyboard
there
might
be
a
dedicated
key
for
home
or
end
if
you
do
home
or
end
it'll.
Take
you
to
the
beginning
and
end
of
the
line,
and
you
can
start
to
build
things
so,
even
though
so
I'm
going
to
say,
left
arrow
to
get
after
the
or
before
rather
the
semicolon,
I
can
do.
Control
shift
left
arrow,
and
now
I
have
all
of
these.
So
let's
say
I
wanted
to
change
these
to
to
be
strings.
B
I
can
paste
all
that
information
in
there.
Do
you
know
what
I
mean,
so
I'm
going
to
show
you
like
something
more
about
this
coming
soon,
there's
one
more
keyboard
shortcut
that
I
find
really
useful
and
and
so
I'm
you
know
you
can
drag
a
line
like
like
I
did
in
the
beginning.
B
You
can
select
a
block
of
text
like
this
by
holding
you
see
it
on
the
screen
there,
but
if
I
hold
the
shift,
alt
shift
sorry
alt
shift
and
then
I
I
drag
you
can
drag
a
bunch
of
stuff.
So
let's
say
I
have.
I
have
a
cursor
right
here
and
I
want
to
select
the
space
or
something
after
the
semicolon.
I
can
do
home
control
right
and
then
here
I
am.
I
have
that
space
selected.
B
I
can
just
shift
select
that
space,
but
if
I
want
to
go
to
the
end
of
the
line,
I
think
it's
alt
shift.
I
I'm
sorry
control
shift.
I
is
it
all
shifted.
Well,
maybe
I
don't
use
it
that
much,
but
anyway,
there's
a
there
is
a
key
command
to
go
to
the
end
of
the
line
too
independent
of
what
you're
actually
selected.
Okay.
B
So
with
that,
I
know,
that's
a
lot,
but
we're
going
to
put
all
this
stuff
into
practice
because
it
it's
actually
a
really
useful
tool
to
be
able
to
make
certain
kinds.
Excuse
me
certain
kinds
of
refactors,
so
here
we
have
hotkey
registry
haka
registry
is
a
thing
that
insomnia's
codebase
created.
You
can
see
there's
a
little
description
here
and
it's
a
record
which
means
it's
an
object
with
key
value
pairs.
The
keys
are
strings
and
the
objects
are
these
key
bindings.
B
A
key
binding
is
also
a
thing
that
we
created.
It
has
an
object,
it
has
a
key
rather
called
mac
keys
and
it
has
another
one
called
win:
linux
keys,
we
should
say
property,
it
has
a
property
called
mac
keys
because
now
we're
using
keys
for
two
different
things.
In
this
context,
keys
means
like
keys
on
a
keyboard
and
so
yeah.
Basically,
these
objects
hold
key
combination.
Arrays
and
a
key
combination
array
is
the
thing
that
we
were.
B
We
were
looking
at
here
before
okay,
so
it's
an
it's
an
object
with
with
arbitrary
strings
and
the
values
of
those
of
those
properties
have
two
properties,
mac
keys
and
winix
linwinix
keys.
I
said
winx
keys,
that's
kind
of
funny
and
then
inside
there
each
of
those
are
arrays
of
things
that
look
like
this
four
booleans
and
a
number,
and
none
of
these
are
optional.
It
has
to
give
you
all
of
these
okay.
B
So
if
you
look
at
how
we
actually
use
this
in
our
app,
what
you'll
see
is
so
I'm
gonna
scroll
up
here
we
have
the
keys
here
are
actually
known.
The
keys
are
workspace,
show
settings.
This
is
just
a
if
I,
if
I
f12
on
this.
Oh,
no
definition,
one
what's
going
on
here.
B
B
A
lot
of
people
don't
know
that
if
you,
if
you
try
to
do
anything
else,
it'll
just
coerce
it
to
a
string
and
it'll
feel
like
it
can
work,
because
you
can
index
into
an
object
with
a
number
or
even
a
boolean,
but
it
just
calls
to
string
on
those
things
internally,
only
keys,
I'm
sorry
only
strings
are
able
to
be
keys
and
objects
for
javascript.
Anyway,
workspace
show
settings,
the
value
of
workspace
show
settings.
So
that's
the
the
key
is
that
the
value
of
it
is
a
call
to
a
function
called
define.
B
B
Can
I
like
get
rid
of?
No,
I
don't
want
to
save
anything
in
there.
I
wonder
if
I
can
get
rid
of
this
the
tabs
at
the
top.
Just
to
be
you
think
I
can
settings.
Let
me
look
really
quick
tabs.
B
Workbench
pin
that's,
pin
tabs,
you
know
there,
we
go
okay,
oh,
but
it
still
takes
up
room.
So
I
don't
know
if
I
really
care
to
do
that,
but
anyway,
whatever
so,
we're
only
really
going
to
be
in
this
file
today
for
this,
but
let
me
put
it,
let
me
just
add
it
back,
because
I'm
going
to
need
it
later
and
here
we
go.
I
used
vs
code
back
in
the
day
when
it
was
first
launched
and
there
were
no
tabs
fun
fact.
It
just
had
the
thing
on
the
left.
B
The
workbench
is
this:
it
so
scroll.
No
here
it
is
show
tabs
all
right
so
keycom.
Okay,
sorry,
we
got
a
little
distracted,
but
let's
get
back
to
it,
so
we
have
define
hotkey.
If
I
click
f12,
I'm
gonna
go
to
the
code
for
define
hotkey
already
we
see
one
little
refactor
that
we
can
do.
This
is
probably
this
function
is
probably
gonna
get
deleted,
but
it
doesn't
matter
in
javascript.
This
is
equivalent,
if
you
say
id
id
like
that,
or
you
just
say
id
these
are.
B
These
are
the
same
thing,
so
we
can
just
make
that
a
little
simpler.
This
literally
returns
a
an
object.
The
object
has
id
and
description,
so
that's
kind
of
cool.
I
don't
know
why
we
need
this
function
at
all.
One
of
the
things
we're
trying
to
produce
with
this
work
that
I'm
showing
you
is
we're
trying
to
reduce
all
of
these
function
calls
and
all
of
this
obscurity.
B
It's
like
there's
a
lot
of
back
and
forth
when
you're
trying
to
write
these
things
and
it
gets
kind
of
complicated,
so
we're
gonna
remove,
define
hotkey
right
now
and
I'm
gonna
do
it
with
a
multi-cursor.
So
I'm
gonna
zoom
out
just
a
little
bit
and
I'm
sorry
about
that.
If
you're
on
your
phone,
in
fact,
I
will
hide
my
face
so
that
you
don't
have
to
see.
B
Let's
see,
how
can
I
just
I
guess
I
can
put-
I
can
put
me
in
the
little
corner
down
there,
so
I'm
just
trying
to
make
the
screen
and
then
I'll
f.
Here
we
go
I'll
full
screen
this
so
that
you
can
see
it
nice
and
large
try
to
just
maximize
the
space.
So
what
I'm
gonna
do
is
I'm
gonna,
I'm
gonna
select
anything
that
has
defined
hotkey
and
then
a
new
line,
so
new
lines
are
characters.
B
They
just
show
you
on
a
new
line,
but
there
is
a
character
and
you
can
select
it.
So
I'm
going
to
select
all
of
those
and
I'm
going
to
just
take
a
quick
peek
here
and
see
that
there
aren't
any
that
are
on
three
lines.
There
are
not
so
I'm
gonna,
I'm
gonna
use
another
command,
that's
really
important
control
d,
so
I'm
gonna.
Do
control
d
and
you'll
see
what
it
did.
B
It
selected
the
next
thing
that
matched
what
my
selection
was,
and
you
see
these
two
blinking
things
on
line
69
and
on
line
76
I
have
a
blinking
cursor,
which
shows
me
a
multi-cursor
selection.
I
can
hit
control
d
again
now.
I
have
three
of
them.
Let's
see
if
we
can
get
them
all
on
screen,
yeah,
there's
all
three
of
them
on
screen,
I'm
going
to
hit
ctrl
d
again,
I'm
going
to
hit
ctrl
d
a
fourth
time,
so
that
covers
all
four
of
the
multi-line
define
hotkeys.
B
So
I'm
going
to
do
this,
I
hit
backspace
to
put
them
that
first
line
on
the
next
sort
of
to
put
it
on
the
the
previous
line,
I'm
going
to
hit
control
shift
or
actually
sorry,
I'm
going
to
hit
ctrl
sorry
shift
left
arrow
and
get
rid
of
all
these
spaces.
B
Then
I'm
going
to
hit
end
to
go
to
the
new
new
line,
and
then
I'm
going
to
come
over
here
and
I'm
going
to
hit
delete
and
then
all
of
those
had
the
same
number
of
spaces.
So
I
can
just
delete
all
of
them
or
I
can
hit
select
them
all
and
hit
space
and
then
so
that's
one
way
to
do.
It
is
to
go
end
to
the
end
of
the
line
and
then
hit
delete
which
will
bring
the
character
from
the
preview
from
the
next
character
up.
B
I
could
also
go
down
to
line
64
67
672.
You
see
that
by
just
hitting
the
down
arrow,
so
you
see
here,
I'm
I'm
selected
on
that
next
line.
That's
like
another
way
to
solve
the
same
problem
and
I'm
going
to
hit
left
arrow
twice
backspace
twice
and
now
I
can
just
get
rid
of
that
that
comma
and
we've
put
all
of
those
things
on
one
line.
That's
you'll
see
why
that's
going
to
be
significant
in
a
second.
B
So
basically,
what
we
want
to
do
next
is
grab
all
these
defined
hot
keys
and
what
it's
useful
to
do.
So,
if
I,
if
I
did,
I
could
you
can
like
hit
control
d
a
lot
of
times
in
order
to
get
down
to
the
thing
that
I
want
to
get.
You
know
what
I
mean,
and
but
what
would
happen
is
look
at
that
it
selects
the
function.
B
Creation
like
the
the
the
function
instantiation
or
whatever
you
want
to
call
it
declaration.
That's
what
I'm
looking
for
it
grabs
this
as
well,
which
I
don't
want
to
change.
I
don't
want
to
change
anything
about
these
lines
and
notice
that,
on
this
line
is
also
a.
B
Parenthesis
like
an
opening
parenthesis,
so
let's
look
here
and
let's,
let's
take
a
peek
at
what
we
I'll
put
that
like
very,
very
close
to
what
we're
selecting
against
it's
invalid
right
now,
but
don't
worry
about
that.
I
can
grab
all
define,
hotkey
and
select
something
that
it
doesn't
have
in
common
with
up
there.
B
So
right
now
it
starts
with
id,
but
look
all
of
these
start
with
an
empty
string
right.
So
if
I
just
select
all
of
that,
you
see
that
when
vs
code
does
a
nice
thing
for
you,
whatever
is
matching
your
selection.
It
shows
you
in
the
background
it's
not
selected,
but
it
shows
you
that
it
would
match.
If
you
used
ctrl
d,
if
I
go
one
more
character,
the
top
one
look
at
line
63
one
more
character
line
63
is
out
of
this-
is
out
of
the
selection.
B
Now,
so
I'm
going
to
delete
that
there's
another
shortcut
that
you
can
use,
so
you
could
do
control
you
could
just
hold
down
latch.
I
could
hold
down
control
d
and
it's
going
to
grab
all
of
those,
and
sometimes
I
do
that,
because
I
want
to
see
what
it's,
what
it's
grabbing,
there's
another
thing
that
you
can
do,
which
is
ctrl
shift,
l,
so
ctrl
shift.
B
L
will
select
all
of
the
things
that
are
that
are
matching
your
current
selection,
I'm
going
to
hit,
which
medusal
opening
bracket
curly,
brace
rather
I'm
gonna,
hit
delete.
You
see
that
it
tried
to
be
nice
to
me
and
it
created
that
closing
bracket.
I
don't
want
that,
I'm
gonna
say
id.
B
Actually,
we
can
go
on
a
new
line.
Now,
I'm
going
to
say
id
and
then
we
need
to
bring
back
that
that
little
guy
over
there
does
that
make
sense.
So
far,
and
then
I
can
go
on
the
end
of
every
line
and
put
a
new
line
and
end
my
object.
So
at
least
we'll
have
a
sort
of
semi-valid
object.
If
you
want
to
think
of
it.
B
B
Now
we're
going
to
see
what
the
situation
is
just
take
a
lay
of
the
lands.
Okay,
we
need
to
grab
all
the
stuff
after
the
id
and
call
and
put
description
in
there
right.
So
what
we're
going
to
do
is
go
to
the
beginning
of
the
line
I'm
going
to
hit
control
right
a
couple
times
and
see
oops
all
right
a
couple
times
we're
going
to
see
that
we've
selected
all
of
these
things
right
now
notice
there
isn't
a
comma.
B
B
We
don't
want
to
touch
that,
but
comma
space
is
in
all
these
other
places
and
we
could
just
grab
all
of
this
stuff
by
hitting
ctrl
d
a
bunch
of
times
and
scrolling
along
with
it
and
seeing
where
we're
going
to
so
I'm
doing
that
now
it's
a
little
more
cautious
to
do
that.
Sometimes
so
now
I
have
a
new
section:
I'm
gonna
hit
backspace
to
get
rid
of
that
extra
space
on
the
end
of
the
line
and
in
type
description.
So
now
what
we've
done
is
we
made
the
code
easier
to
read?
B
We
got
rid
of
a
function,
call
that
we
don't
care
about
and
now
typescript
is
telling
me.
We
don't
need
this
function,
that's
absolutely
right.
We
don't
need
that
function
at
all.
We
never
needed
it
and
we
don't
need
a
structure
to
define
this
anyway,
but
whatever.
If,
if
it's
useful,
we
can
search
the
code
base
and
see
hotkey
definition
is
used
in
other
places.
So
we
can
leave
the
structure
there.
We
can
leave
sorry,
I'm
in
go
mode
and
go
yeah,
you
don't
anyway,
we
can
leave
the
interface
there
so
yeah.
B
B
All
these
terms
are
overloaded,
but
that's
fine
and
then
I'm
gonna
save
this
file
and
we'll
see
in
the
diff
what
the
file
is
looking
like.
B
Here
we
go
all
right,
that's
great,
and
this
is
exactly
what
we're
looking
for.
So
here's
before
and
after
right
on
the
left.
We
have
this
function.
Call
we
don't
know
what
this
thing
is
without
looking
at
into
the
function
or
hovering
over
it.
But
now,
just
by
reading
the
code
from
a
distance,
we
can
see.
Oh
it's
just
an
id
and
there's
this
description
thing
and
this
descriptions
are
really
simple.
B
Yes,
we're
duplicating,
we
have
a
lot
more
lines
of
code
and
yes,
we're
duplicating
all
of
this
id
description
thing,
but
typescript
will
protect
us
if
we
screw
up.
So
if
we
type
something
here,
if
we
make
a
typo
in
one
of
these
just
one
of
them,
it
will
tell
us-
and
if
we
forget
to
add
one,
it
will
tell
us
hey
it's
saying:
property
description
is
missing
and
type,
so
that's
not
a
problem
to
have
the
duplication
there.
B
If
you're,
looking
at
this
and
saying
oh
there's
so
many
bugs
that
you
could
create
no,
there
aren't
because
we
have
static
analysis,
tooling.
That
prevents
us
from
making
these
kinds
of
bugs,
and
this
tooling
runs
on
our
code
all
the
time,
which
is
the
same
thing
that
happens
in
any
language
where
this
is
required.
You
know
we
just
we
require
it
in
ourselves
and
that's
how
typescript
works.
So
that's
the
first
commit
so
removes
hot
key
removes
defined
hotkey.
Okay,
that's
that's
step.
B
B
It
has
key
bindings
which
are
mac
keys
and
when
linux
keys
and
then
those
are
arrays
of
these
things,
ctrl
alt
shift
meta
code,
key
code,
we're
going
to
do
exactly
the
same
type
of
thing,
but
I
wanted
to
show
that
other
one
first,
because
it's
a
really
nice
primer
into
what
we're
going
to
actually
be
looking
at.
So
here
we're
going
to
do
our
goal
is
to
get
rid
of
keybinds,
but
we
have
to
do
that
step
at
a
time,
we're
not
going
to
jump
in
all
at
once.
B
First
we're
going
to
get
rid
of
keycom.
So
if
I,
if
I
f12
to
go
into
this,
we
see
same
thing
here.
So
look
it
check
this
out.
This
doesn't
really
matter
because
we're
going
to
delete
this
code,
but
I
can
hit
ctrl
d
a
couple
times
and
I
have
a
multi-cursor
here
and
then
I
can.
I
can
hit
shift
and
right
arrow
select,
all
the
stuff
there
and
just
hit
backspace,
and
now
I've
cleaned
up
this
code
a
little
bit
like
made
it
a
little
easier
to
read.
B
So
it's
okay,
so
key
com
is
pretty
simple:
it
takes
in
control,
alt
shift
meta
key
code
and
it
returns
an
object.
Control
alt
shift
meta
key
code
with
the
values
that
it
was
passed
in
in
that
order.
So
we're
going
to
do.
Ctrl
alt
shift
meta
key
code.
Okay,
so
let's
go
to
keycom
and
let's
take
a
look
at.
Let's
take
a
look
at
one
of
these,
so
I
also
use
control
d.
B
B
So
so
we
can
see
here
if
we
hover
control,
alt,
shift
meta
key
code
and
let's
take
a
look
through
before
we
actually
do
anything.
Let's
take
a
look
to
see
what
these
all
look
like.
These
look
pretty
straightforward
and
they
look
very
consistent.
It's
just
booleans
right
and
there's
no
other
place
in
this
in
this
file
where
this
is
used
and
this
function
is
not
exported.
So
we
know
it's
safe
to
change
it
here,
because
it's
not
used
anywhere
else
in
the
code
base.
There's
no
tests
for
it
either.
B
So
I'm
going
to
select
keycom
space
space
keycom.
So
again,
I'm
trying
to
select
something
that
will
not
catch
this.
If
I
did
keycom
and
then
opening
parentheses,
it's
not
gonna
work,
we
wanna
and
if
I
did
one
space,
it's
not
gonna
work
either,
but
two
spaces
that
works
just
fine.
So
if
I
go
down
here
two
spaces,
so
I'm
gonna
select
this
and
I'm
gonna
hit
control
shift
l,
so
that
puts
a
cursor
and
we
can
check
that
that
puts
a
cursor
on
and
see.
B
Some
of
these
are
indented
differently
that
doesn't
matter.
We
don't
care
about
that
and
we're
going
to
be
just
fine
without
that
some
of
these
are
indented
in
different
places.
We
have
a
multi-cursor
selection
on
all
those
different
places,
so
I
can
hit
control.
So,
let's
just
remember,
control
alt
shift
meta
key
code.
We're
going
to
check
this
anyway,
so
I'm
going
to
make
an
object.
B
B
Key
code,
I'm
gonna
go
to
the
end
of
the
line.
I'm
gonna
just
shift
scroll
to
the
end
of
the
line
and
we're
gonna
see
that
we
need
to
finish
this
object.
Vs
code
tries
to
be
nice,
but
it
doesn't
know
we're
doing
a
bunch
of
multi-cursor
stuff.
Okay,
I'm
gonna
go
to
the
beginning
of
the
beginning
of
the
line
here
and
I'm
just
gonna,
I'm
just
gonna
click
escape
to
get
rid
of
my
multi-cursor
view.
Hopefully
key
binds
like
if
we
did
this
yeah,
it
would
give
us
an
error.
B
Okay,
typescript
is
gonna
save
us.
So
if
we
see
you
know,
you
can
see
in
this
file
that
there
are
no
type
errors.
So
that
means
that
we're
kind
of
clear
to
go.
We
can
now
delete
this
function.
At
this
point,
I
want
to
make
sure
that
there
are
no
errors
in
this
file
as
we're
going
so
you
see,
hotkeys
is
now
it's
not
red
anymore.
If
we
had
a,
we
had
a
problem,
it
would
be
red.
So
that's
just
a
quick
indication
for
us.
B
We
can
also
see
in
the
minimap
thing
on
the
right.
So
now
we
have
an
interesting
opportunity
in
keybinds
and
we're
going
to
take
we're
going
to
take
that
opportunity.
So
what
we're
going
to
do?
Is
we
wanna
what
we
wanna
like
my
goal
right
now,
is
anything
that
says
false
to
remove
it,
because
it's
just
noise,
we
wanna
see
what
the
key
is.
We
don't
wanna
see
what
the
key
command
isn't.
If
this
key
command
doesn't
use
control,
we
don't
care
about
that,
but
we
still
need
the
data
underlyingly.
B
So
let's
look
through
this,
so
this
is
keybinds.
We're
going
to
fix
keybinds
too,
but
keybinds
is
another.
Is
another
thing
here
that
that
does
that
does
like
basically
very
little
work
and
I'm
gonna
change.
I'm
gonna
start
by
changing.
We
can
do
f12
refactor
here,
so
back
keys
is
what
we're
going
to
call
it,
and
this
is
going
to
be
called
win.
B
Linux
keys,
okay,
so
we're
going
to
we're
going
to
get
rid
of
same
thing
like
we
did
before
oops
same
thing,
we're
going
to
get
rid
of
this
stuff
and
then
we're
going
to
go
into
we're
going
to
go
into
here
and
we're
going
to
say,
let's
say:
dot,
dot,
mac
keys.
B
So
if
this
is
an
array
we
want
to
put
it
in
there.
If
it's
not
an
array,
then
we
make
an
array
of
mac
keys,
but
what
we
basically
want
to
do
is
supply
defaults
to
all
of
these
things,
so
that,
like
I
said,
we
can
remove
all
this
stuff
so
going
up
to
keybinds.
B
If
it's
not
an
array,
then
we
want
to
make
it
an
array
and
in
both
cases
we
want
to
map
a
default.
There
is
a
ramda.
We
use
a
thing
in
called
ramda
on
vs
code.
There
is
a
ramda
function.
That
will
add
these
defaults
back,
but
this
is
actually
not
an
object.
That
was
wrong
about
that.
But
is
mapkeys.map
map
key
and
then
here
here
it's
an
object
and
then
we're
going
to
say
ctrl,
false
control.
Alt,
you
don't
know
what
I'm
doing.
B
It'll
be
clear
in
a
second,
you
know,
and
we
could
have
done
this
by
the
way
we
could
have
done
this
by
grabbing.
You
know
by
grabbing
one
of
these
guys
and
adding
it,
but
that's
okay,
meta,
false
and
then.
B
So
this
is
oh
sorry,
the
spread
always
overwrites
these
properties
right.
So
what
we
want
to
do
is
we
tell
we
want
to
tell
it
that
we
are
accepting
a
partial,
key
combination
that
will
make
that
error.
Go
away
or
partial
key
combination,
array
right
and
that's
the
same
for
both
of
these.
So
I'm
going
to
select
this
and
and
change
it
here.
We
could
have
done
that
as
well
with
a
multi-cursor,
but
it's
okay
and
we
don't
want.
B
I
guess
it's
funny,
because
some
of
the
some
of
the
keys
are
are
are
partial.
So
actually
we
want
to
do.
Let's,
let's
get
up,
let's
see
import
from
type
fest.
B
We're
gonna
do
option
set
optional.
B
B
So
I'm
going
to
grab
all
the
places
where,
before
it
said,
partial
key
combination
with
control
d
and
replace
it
with
optional
keys.
Now
typescript
is
happy.
We
have
to
sort
our
imports
there,
but
that's
okay.
It
doesn't
care
about
that
and
we're
going
to
do
the
same
thing
here.
We're
gonna,
say
dot
map
and
it's
not
called
map
key
or
I
said,
map
key.
It's
called
mac
key.
Thank
you
and
this
one
will
rename
as
well
win
linux.
B
Key
links,
links
key
lin.
L,
I
n.
U,
l,
I
n,
u
x,
okay,
so
same
deal.
There
did
we
do
anything
wrong?
Why
is
it?
Why
is
my
mac
key?
B
B
Is
is
an
array
optional
except
we'll
come
back
to
this,
so
what
we
want
to
do
down
here
is
we
want
to
take
all
the
things
that
are
control
false
and
we
want
to
select
all
of
them.
So
I
do
ctrl
shift
l
and
we
do
delete
delete
now.
They're
gone
now
we're
going
to
do
all
the
things
that
are
alt
alt-false.
B
We
don't
care
about
those
either
ctrl
shift,
l
delete
shift.
True,
we
don't
we
don't
mind,
but
let's
find
a
shift
false.
So
here's
a
shift
false.
B
Shift
false
here,
control
shift,
l
and
I
can
backspace
would
work
too,
and
the
same
goes
for
meta.
We
want
to
find
meta
meta
false
somewhere
here
it
is
meta.
False
ctrl
shift,
l
backspace.
B
So
we
have,
we
have
a
function
that
takes
an
array
or
that
takes
two
two
objects
and
or
two
arguments.
Rather.
The
first
argument
can
be
an
array
or
the
second
argument
can
be
an
array
I
remember
now.
What
we
should
probably
do
and
what
we
could
do
to
get
rid
of
key
binds
is
mandate
that
all
of
these
things
are
arrays
and
the
way
we
can
do
that
is
we
can.
B
Why
is
this
doing
this
there's
some
kind
of
weird
complaint
it's
making
here,
but
that's
okay.
Maybe
we're
going
to
be
doing
doing
away
with
this
anyway.
Oh
control
is
gone
oops
because
it
was
from
here,
okay
control,
false.
B
B
B
Actually
we
could
be
really
specific
about
it
like
this.
We
could
do
key,
binds
and
then
select
down
to
there.
Ctrl
shift,
l
and
then
I'm
gonna.
Do
I'm
gonna.
Do
an
array
here
and
I'm
gonna
come
down
and
do
an
array
here
as
well.
We
should
see
that
there
are
no
errors
in
the
code.
Everybody
should
be
happy
up
here.
It
has
a
problem.
Why
is
there
a
syntax
error,
though
I
don't
get.
I
don't
get
that
comments.
Anyone
in
the
chat-
oh
there's
somebody
here,
hey,
stalin!
B
C
B
Well,
anywho:
what's
up
can.
A
A
How
you
doing
okay,
I
was
saying
it
sorry,
so
yeah!
So
it's
it's
not!
The
object
is
not
defined.
The
key
is
not
defined
after
map
map
keys
so
for
keys.
B
Get
right
there:
okay,
it's
very
frustrating
when
somebody
key.
A
B
Okay-
okay,
great
great,
I
was
moving
too
fast.
Thank
you
all
right,
colin
yeah.
Thank
you,
robinson
yeah.
All
that
talk
about
how
anybody
that
reads.
This
should
be
able
to
understand
it,
and
I
can't
understand
it.
It's
a
little
different.
I
suppose
when
you're
that's
funny,
so
set
required.
Okay,
so
we're
back
we're
back
everybody's
working-
and
I
have
I
I
expressed
this
differently
really.
B
What
we
want
to
say
is
like
everything
is
optional,
except
this
one
thing
is
not
optional,
and
the
reason
for
that
is,
I
don't
want
to.
Somebody
should
get
an
error
here
if
they
don't
pass
key
code
or
they
have
an
error
or
something
or
they
misspell
it
or
something
like
that,
it
should
be
optional
and
the
same
goes
for
any
of
these
other
things.
That's
not
possible
to
make
a
mistake
because
typescript
is
going
to
catch
it
all
the
way.
B
Okay,
wonderful,
so
keyboard
keys,
okay,
so
this
is
where
we're
at
right.
Now
we
want
to
take
it
just
one
step
further
we
want
to.
We
want
to
make
the
key
bindings
itself.
We
want
to
change
key
bindings
to
have
these
things.
Be
optional
and
key
code
not
never
be
optional
and
they're
checked
as
booleans
anyway.
This
is
the
first
thing
that's
going
to
go
outside
of
our
outside
of
the
file
that
we've
been
refactoring,
but
that's,
okay,
let's
just
let's
just
kind
of
take
it
one
step
at
a
time.
B
So
then
it's
funny
because
I
knew
this
was
going
to
be
deleted,
but
like
the
next
step,
and
so
now,
we've
taken
ourselves
to
this
point
where
actually
key
combination
is
what
we're
using-
and
these
are
all
what's,
the
errors
here.
Key
combination,
control
from
key
combination
where
oh
I
have
to
rebuild
okay,
so
I
have
to
read:
bootstrap
npm
run
boot,
strap,
that's
fine!
That's
just
a
so.
The
code
hasn't
rebuilt.
We
changed
something
in
another
package
and
it
hasn't
had
a
chance
to
get
that
new
information.
B
Yet
that's
fine,
so
we'll
let
that
go
in
the
background.
These
errors
are
going
to
go
away.
So
now
I
think,
hopefully,
what
you
see
on
the
screen
here
is
wildly
cop.
You
know
familiar
we're
peeling
back
all
this
wrapping
complexity
like
when
you
get
right
down
to
it.
There
wasn't
really
a
lot
going
on
here,
but
all
the
complexity
was
obscured
and
you
had
to
kind
of
like
go
deep
to
find
out
what
was
going
on
into
like
four
or
five
different
wrapper
functions.
B
So
we
want
to
undo
that
keybinds
here
is
very
similar
now
to
the
other
things
and
we're
gonna,
just
just
for
the
second
just
to
make
this
really.
This
refactor
really
easy
we're
gonna
we're
gonna
go
on
the
ones
that
did
have
multiple
lines
and
we're
gonna
we're
gonna
put
them
on
on
their
own
line.
Sometimes
it's
helpful
to
do
that
when
you're
doing
a
lot
of
large
multi-cursor
work,
there
are
not
that
they're
only
like
two
of
them.
B
I
think
that
have
that
actually
utilize
that
feature
where
you
have
multiple
keyboard
shortcuts
in
the
default
configuration
that
we
have
in
this
file.
So
we
don't
really
need
to
pander
to
that
too
much
and
all
the
rest
of
them
are
set
great.
So,
to
get
rid
of
this
to
get
rid
of
keybinds
we're
going
to
let's
collapse
this,
so
we
can
see
to
get
rid
of
keybinds
the
first
one
that
it
sends
is
mac
keys
and
the
second
one
is
win.
B
Linux
keys,
so
we're
gonna,
select
colon
space
keybinds
and
then
all
the
way
to
the
parentheses
there.
I'm
gonna
hit
ctrl
shift
l
and
we
can
see
on
the
right.
What's
what's
selected,
I'm
gonna
get
rid
of
this.
B
I'm
gonna
go
down
and
then
hit
home
to
go
to
the
beginning
of
the
line
and
then
oops
we're
gonna
put
on
this
next
line
up
here.
We're
going
to
we're
going
to
start
an
object.
So
then,
I'm
going
to
say,
mac
keys,
look
at
that!
Typescript
helped
me
out,
and
then
I'm
going
to
come
on
this
next
line
and
I'm
going
to
say,
win
linux
keys
and
I'm
going
to
create
a
new
line
end
my
object
hit
backspace
a
couple
times
to
get
rid
of
that
function.
Call-
and
here
we
are.
B
B
Property
map,
keys
types
of
property
mac
keys
are
incompatible
with
shift
array,
is
not
possible
to
assign
to
key
common
shift
is
missing
the
following
properties:
control,
r,
okay.
So
this
this
control
type
typescript
needs
to
be
restarted,
restart
ts
because
it
didn't
it
didn't
get
those
changes
that
were
built
in
another
package
yet
and
I'm
assuming
they've
finished.
Building
by
now
we
should
see
after
it
says
initializing
typescript
we
should.
I
would
expect
there
to
say
no
errors,
but
it's
missing.
B
So,
let's,
let's
go
look
at
it
key
which,
what
did
it
say
is
missing
from
key
combination.
Okay,
let's
go
to
key
combination
here.
Oh
I
didn't
save
it.
Oh
I
didn't
save
it
all
right.
I
gotta
try
again
npm
run.
What
did
I
spell
it
wrong
boot?
Oh
bootstrap,
okay,
two
things
I
did
wrong,
I
didn't
save
it
and
then
I
didn't
even
start
it
bootstrapping.
B
So
both
both
of
those
things
will
result
in
it,
not
working,
but
that's.
Okay.
It's
been
like
a
whole
a
whole
session
today
on
multi-cursor
stuff,
but
that's
fine.
It's
kind
of
fun
stop
stalin.
Do
you
use
this
kind
of
stuff
when
you
work
these
multi-cursors.
A
Yeah
yeah,
of
course,
but
I
haven't
transitioned
to
vs
code.
Yet
I
am
still
a
sublime
user.
C
C
C
How's
that
happening,
I
must
have
made
a
mistake.
Okay,
I
hit
backspace
okay,
I
do
that
down
here
as
well.
No.
B
Okay,
so
what
we
see
is
now
this
is
all
good.
It's
all
working,
there's
no
errors
in
this
code.
What
we
can
do,
though
we
need
to,
we
really
need
to
check
anywhere
that
key
combination
was
used
to
see.
If,
if
that
code
cares
now
it
might
not
the
beautiful
thing
about
typescript
is
it
might
not
care
about
key
combination
being
undefined
because
or
at
least
potentially
being
undefined?
B
I
mean
we'll
be
able
to
see
as
we
go
file
by
file
if
anything
cares
because
usually
what's
happening
with
booleans
is
you're
just
using
them
in
boolean
logic.
So
we
don't
want
add
key
combination
here,
so
we
just
want
to
do
this
key
combination.
B
So,
let's
start
again
from
the
top
it's
imported
here,
but
then
never
used
again.
Oh
okay!
Here
we
go
so
you
see
what's
happening
here.
If
mac
then
do
this
yada
yada
yada,
if
the
key
so
we're
switching
on
each
particular
thing.
If
the
key
is
ctrl,
alt
shift
meta
mac,
whatever
then
do
that
it
doesn't
really
matter
like
the
code.
B
The
code
that
we're
looking
at
doesn't
care
if
it's
a
boolean
or
if
it's
like
undefined
or
not
present,
it
doesn't
make
any
difference
to
that
code,
so
we
should
be
all
set.
We
don't.
Maybe
we
don't
actually
have
to
touch
any
other
file,
which
is
the
goal
for
this.
The
scope
of
this
particular
work
is
to
not
touch
any
other
file
anywhere
else,
and
it
seems
like
we
achieved
that
so
key
bindings
yeah.
So
hotkey
registry
is
an
array
of
key
bindings
and
these
are
key
bindings.
B
Okay,
so
we
we
did
that
one
file,
but
that's
it
otherwise,
and
let's
start
up
the
app
and
see
that
we're
good
to
go
so
npm
run
app
start.
I
think
I
can
probably
get
rid
of
my
screencast
mode.
We
can
probably
turn
off
so
I'm
going
to
run,
and
so
I'm
going
to
have
insomnia
pulled
up
over
here
while
we're
we're
waiting
for
that
I'll
make
a
commit.
B
I
love
get
cracking
jack
jack's
been
working
in
the
background,
hi
jack.
What
have
you
been
up
to
something
with
markdown
preview?
That's
cool!
So
here
we
see
our
code,
and
here
we
see
a
before
and
after
it's
a
pretty
clean
one
to
one
like
it's
pretty
easy
to
see.
What's
going
on
one
to
one
before
and
after,
and
then
we
have
here
the
the
change
that
we
had
to
make
in
the
hotkeys,
it
seems
like
everything
works,
I
don't
see
any
errors.
B
Let's
look
at
the
console.
I
don't
see
any
errors
in
the
the
console
related
to
this,
but
maybe
there
are,
I
see
well,
there's
errors
about
something,
let's
filter
by.
Let's
get
these
warnings
out
of
here,
nunjuck's
values
these
are
about.
This
is
completely
irrelevant.
B
This
is
about
something
that
changed
recently
with
themes,
and
I
I
was
glad
to
have
the
opportunity
to
install
some
some
community
plugins
and
make
prs
to
their
plugins
to
update
something
that
we
changed
in
our
app
but
anywho
yeah,
it's
all
working,
I'm
gonna
do
control
enter.
I
can
send
what's
another
keyboard
shortcut.
Oh
there's
one
for
hide
the
let's
do
that
one
switch
toggle,
sidebar
control,
backsplash,
okay,
so
keyboard
shortcuts
are
working.
Everyone
is
happy,
so
the
pr
is
done.
B
Basically,
so
I'm
going
to
do
I'm
going
to
make
a
commit
and
it's
going
to
be
called.
B
So
it
means
that
if
you're
debugging
a
test,
you
literally
have
to
debug
like
a
couple
thousand
lines
of
going
through
the
hotkey
stuff
or
if
you
use
a
tool
like
like
wallaby,
where
it
shows
you
a
story,
there's
also
tool
runners
that
other
tool
runners
that
do
this.
That
shows
you
a
story
of
what
has
happened
during
your
test
like
fully
90
of
the
code.
Is
this
stuff,
this
key
combination
stuff
and
if
we
just
create
an
object,
we
have
that
object
there
and
it's,
and
we
can
do
that.
B
B
Is
it
here?
Oh
here
we
go
here
we
go
okay,
so
I
did
a
multi-cursor
of
selecting
something
that
only
those
lines
have
in
common,
which
is
the
comma
space
opening
curly
I'm
going
to
hit
backspace
oops,
backspace
once
and
then
enter,
and
then
I
can
go
to
the
the
end
of
the
line
for
those.
B
Let's
see
if
that
got
us
close,
we
want
to
do
this.
B
It's
going
to
add
our
our
our
stuff
for
us.
There.
B
So
we
can
do
a
little
little
spot
work
here
to
repair
that
so
good
okay,
so
we
have
here
yeah.
Isn't
that
interesting?
There
are.
There
are
examples
I
wouldn't
have
known
that
by
looking
before.
There
are
examples
that
don't
have
a
modifier
at
all
that
don't
have
control
or
meta
or
shift
or
alt,
or
anything
like
that
at
all,
and
you
can
see
that,
like
one
of
the
reasons
to
do
this,
refactor
right
is
that
to
help
us
understand
what
they
are
so
now
I
can
see
like
you
can
read
this
really
easily.
B
How
do
you
do
the
request?
Send
keyboard
shortcut
well
on
mac,
it's
meta
enter
or
meta
or
r,
or
you
just
hit
f5
on
winner
windows
or
linux.
It's
control
enter
control,
r
or
f5.
It's
really
easy.
Just
by
reading
the
code,
you
don't
have
to
go
anywhere
else.
It's
right
in
front
of
you
to
see
what
the
actual
intent
is
of
what's
written
here
and
that's.
That
was
the
point
of
all
of
today's
work.
That
was
the
point
of
the
refactor.
B
I
guess
also
it's
fun
to
talk
about
multi-cursor
stuff,
so
I
don't
actually
want
to
make
a
new
commit
for
this.
I
already
committed,
but
I
forgot
something
so
I'm
going
to
stage
this
click
amend
and
then
amend
the
commit
from
here.
I
can
push
it
to
my
fork
and
then
I
can
make
a
pull
request
and
I'm
going
to
say,
removes
wrappers
for
so,
while
I'm
typing
this
stalin,
would
you
use
multi-cursors
for.
B
Sometimes,
like
there's
a
there's,
a
here's,
the
thing
I'll
show.
C
One
more
example:
since
we're
on
the
topic:
we
did
like
a
master
class
on
multi-cursors
today,
sometimes
like.
Let's
say
I
have
a
folder
or,
let's
say
cd,
let's
find
a
folder,
that's
like.
B
I
don't
know
cd
packages,
insomnia
source
us
common
here,
so
let's
say
I
have
a
list
of
ls
lha.
So,
let's
let's
say
I
have
a
bunch
of
files
like
this.
I
have
to
make
it
a
little
smaller
to
grab
everything.
B
Sometimes
what
I'll
do
if
I,
if
I
want
to
make
an
operation,
let's
let's
say
I
want
to
like
copy
all
of
these
things
you
can
you
can
copy
them
all
paste.
It
then
select
something
that
all
of
these
lines
have
in
common.
Like
I
don't
know
this
ctrl
shift,
l
I
can
go
to
where
I
want
to
go
now.
I
have
a
multi-cursor
of
all
the
oh.
Why
did
that
one
not
get
selected?
Okay!
B
Well,
anyway,
let's
see,
let's
go
back
actually
what's
the
deal,
because
it's
oh
because
it
wasn't
modified
today,
okay,
so
let's
do
we
can
just
do
a.
We
can
just
drop
a
line
right
down
here,
select
all
of
these
things
and
remove
them,
and
I
can
say,
like
let's
say
I
wanted
to
make
an
array
with
all
these
things.
I
can
make
each
of
the
elements
as
items
and
then
I
can
come
over
here
end.
It
and
I
can
come
over
here.
B
Const
x,
equals
start
the
array,
and
now
I
have
an
array
really
quickly.
I
mean.
Obviously
there
are
other
ways
to
do
this,
but
I
bet
you,
this
is
one
of
the
fastest.
You
know.
Sometimes
the
stupid
way
is
the
is
the
best
way.
Now
I
have
a
list
of
all
the
different
all
of
the
different
things
that
were
all
the
different
files
that
were
in
that
directory
as
source
code,
and
now
I
can
do
something
with
that
and
multicurser
allows
me
to
do
that.
So
it's
not
really
a
refactor,
but
is
that
you?
A
C
David
today,
almost
every
day,
all
right,
wow,
so
then
you're
even
improving
you're,
even
more
a
stronger
power
user
than
I
am.
B
B
All
right:
well,
I
think
that's
it
for
today
we
don't
have
time
to
get
into
other
topics.
I
told
my
team.
This
would
take
five
minutes
if
you're
doing
it
quickly
it.
I
have
done
it
before
it
takes
about
five
minutes,
but
I
wanted
to
talk
about
like
the
intro
on
multi-cursor
and
hopefully
that's
useful
to
people,
and
if
this
is
interesting
to
you
or
you
like
this
kind
of
content,
please
comment
you
can
comment
on
youtube
or
anywhere,
basically
on
our
the
insomnia
community
slack
after
this
video.
B
If
you
see
this
later,
please
do
comment
and
tell
us
if
you
think
this
kind
of
content
is
useful
or
you'd
like
to
see
more
stuff
like
this,
that
you
know
we
didn't
like
get
into
the
guts
of
insomnia
per
se.
Today
it
was
more
about
how
to
do
how
to
fix
stuff
like
this,
to
make
it
easier
to
maintain,
and
if
you'd
like
to
see
more
stuff
like
this,
please
just
let
us
know,
and
we
can
do
more
so
cool.
You
got
any
thoughts.
Alan.
A
No,
this
is
good.
Actually,
when
you
opened
the
today's
session,
I
was
wondering
this
was
not
how
it
usually
starts.
Wait.
Yeah.
A
When
yeah,
I
I
first
came
to
know
about
this,
maybe
three
or
four
weeks
back,
I
guess
so
that
was
from
linkedin.
I
started
following
kong
and
then
suddenly
I
saw
the
session
like
this
and
I
first
joined.
C
A
Reader
then
I
went
on
youtube
and
then
again
I
was
wondering
each
day
it's
different
different
people
who
are
joining
this
session.
How
do
they
join
so
then?
Somehow
I
found
the
slack
channel
and
when
I
joined
slack
channel
still,
then,
when
I'm
joining
in
for
the
first
time,
I
wouldn't
see
the
stream
hash
stream
channel
that
won't
be
there.
That
is
also
invisible.
A
B
A
C
B
I
like
it,
I
agree
with
you
more
people
should
do
this
if
you
do
open
source
development
all
day
long,
there's
no
reason.
I
I
don't
see
any
reason
not
to
do
this,
even
if
you're
not
good
at
it.
I
watch
hour
like
many
hour
long
sessions,
you
know
and
of
people
who
do
this.
Let
me
see.
A
B
I
I
couldn't
agree
more,
you
said
it
very,
very
elegantly
there
you
know
this
is.
This
is
basically
the
same
thing
like
this
is
a
guy
that
I
watch.
He
does
a
lot
of
rust
content
and
you
know
six
hour,
video
five
hour,
video
six
hour,
video
three
hour,
video
and
that's
just
in
the
first
ten
I
mean
he
does
very
long
form
content,
and
some
of
it
is
not.
B
Some
of
it
is
very
specific,
like
you
know,
trying
to
cover
some
topics,
sort
of
like
we
did
today,
but
I
find
it
super
valuable
to
have
stuff
like
this
and
some
of
these
six
hours.
I
mean
many
of
these
six
hour.
Videos
like
this
world
solver
one.
I've
listened
to
this
whole
thing
on
my
you
know
like
I'm
cleaning
the
house
at
night
or
I'm
doing
something,
I'm
doing
the
dishes.
B
I
just
chunk
it
through
like
half
an
hour
at
a
time,
and
I
really
find
this
content
valuable
and
it
doesn't
matter
to
me
if
you
watch
these
videos
like,
let's
do
it.
If
you
go
here,
it's
gonna,
be
him
going.
B
Funny
is
that
I
just
clicked
to
a
random
place
and
you
keep
going
okay
matches,
but
I
love
it.
I
love
this
kind
of
content
and
I
want
more
people
to
do
it.
So
that's
why
we
do
this
one
of
the
reasons
we
do
the
stream
so
anyway.
Thank
you
again,
stalin
for
coming
on.
It's
good
to
see
you
as
always,
and
we'll
hopefully
see
you
next
week.
Okay,
sure,
all
right,
bye,.