9.1. Default Key Bindings (Windows)

For each table, a blank line means that keypress is not mapped in Default/Default (Windows).sublime-keymap.

9.1.1. Number Keys

Key:
     A = Alt
     C = Ctrl
     S = Shift
  Ctxt = Context

Key

A

C

S

Ctxt

Command

Args

1

1

x

1

x

focus_group

{"group": 0}

1

x

x

move_to_group

{"group": 0}

1

x

select_by_index

{"index": 0}

1

x

[1]

focus_by_index

{"index": 0}

1

x

x

set_layout

{"cells": [[0, 0, 1, 1]], "cols": [0.0, 1.0], "rows": [0.0, 1.0]}

1

x

x

1

x

x

x

2

2

x

2

x

focus_group

{"group": 1}

2

x

x

move_to_group

{"group": 1}

2

x

select_by_index

{"index": 1}

2

x

[2]

focus_by_index

{"index": 1}

2

x

x

set_layout

{"cells": [[0, 0, 1, 1], [1, 0, 2, 1]], "cols": [0.0, 0.5, 1.0], "rows": [0.0, 1.0]}

2

x

x

2

x

x

x

3

3

x

3

x

focus_group

{"group": 2}

3

x

x

move_to_group

{"group": 2}

3

x

select_by_index

{"index": 2}

3

x

[3]

focus_by_index

{"index": 2}

3

x

x

set_layout

{"cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]], "cols": [0.0, 0.33, 0.66, 1.0], "rows": [0.0, 1.0]}

3

x

x

3

x

x

x

4

4

x

4

x

focus_group

{"group": 3}

4

x

x

move_to_group

{"group": 3}

4

x

select_by_index

{"index": 3}

4

x

[4]

focus_by_index

{"index": 3}

4

x

x

set_layout

{"cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]], "cols": [0.0, 0.25, 0.5, 0.75, 1.0], "rows": [0.0, 1.0]}

4

x

x

4

x

x

x

5

5

x

5

x

focus_group

{"group": 4}

5

x

x

move_to_group

{"group": 4}

5

x

select_by_index

{"index": 4}

5

x

[5]

focus_by_index

{"index": 4}

5

x

x

set_layout

{"cells": [[0, 0, 1, 1], [1, 0, 2, 1], [0, 1, 1, 2], [1, 1, 2, 2]], "cols": [0.0, 0.5, 1.0], "rows": [0.0, 0.5, 1.0]}

5

x

x

5

x

x

x

6

6

x

6

x

focus_group

{"group": 5}

6

x

x

move_to_group

{"group": 5}

6

x

select_by_index

{"index": 5}

6

x

[6]

focus_by_index

{"index": 5}

6

x

x

6

x

x

6

x

x

x

7

7

x

7

x

focus_group

{"group": 6}

7

x

x

move_to_group

{"group": 6}

7

x

select_by_index

{"index": 6}

7

x

[7]

focus_by_index

{"index": 6}

7

x

x

7

x

x

7

x

x

x

8

8

x

8

x

focus_group

{"group": 7}

8

x

x

move_to_group

{"group": 7}

8

x

select_by_index

{"index": 7}

8

x

[8]

focus_by_index

{"index": 7}

8

x

x

set_layout

{"cells": [[0, 0, 1, 1], [0, 1, 1, 2]], "cols": [0.0, 1.0], "rows": [0.0, 0.5, 1.0]}

8

x

x

8

x

x

x

9

9

x

9

x

focus_group

{"group": 8}

9

x

x

move_to_group

{"group": 8}

9

x

select_last_tab

9

x

[9]

focus_by_index

{"index": 8}

9

x

x

set_layout

{"cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]], "cols": [0.0, 1.0], "rows": [0.0, 0.33, 0.66, 1.0]}

9

x

x

9

x

x

x

0

0

x

0

x

focus_side_bar

0

x

x

0

x

[10]

focus_by_index

{"index": 9}

0

x

x

0

x

x

0

x

x

x

"context": [
  { "key": "group_has_multiselect" }
    // Does View group have multi-select?
]
"context": [
  { "key": "group_has_multiselect" }
    // Does View group have multi-select?
]
"context": [
  { "key": "group_has_multiselect" }
    // Does View group have multi-select?
]
"context": [
  { "key": "group_has_multiselect" }
    // Does View group have multi-select?
]
"context": [
  { "key": "group_has_multiselect" }
    // Does View group have multi-select?
]
"context": [
  { "key": "group_has_multiselect" }
    // Does View group have multi-select?
]
"context": [
  { "key": "group_has_multiselect" }
    // Does View group have multi-select?
]
"context": [
  { "key": "group_has_multiselect" }
    // Does View group have multi-select?
]
"context": [
  { "key": "group_has_multiselect" }
    // Does View group have multi-select?
]
"context": [
  { "key": "group_has_multiselect" }
    // Does View group have multi-select?
]

9.1.2. Letter Keys

Key:
     A = Alt
     C = Ctrl
     S = Shift
  Ctxt = Context

Key

A

C

S

Ctxt

Command

Args

a

a

x

a

x

select_all

a

x

x

expand_selection

{"to": "smart"}

a

x

x

[11]

expand_selection

{"to": "tag"}

a

x

[12]

toggle_preserve_case

a

x

x

a

x

x

a

x

x

x

b

b

x

b

x

build

b

x

x

build

{"select": true}

b

x

b

x

x

b

x

x

b

x

x

x

c

c

x

c

x

copy

c

x

x

c

x

[13]

toggle_case_sensitive

c

x

x

c

x

x

c

x

x

x

d

d

x

d

x

find_under_expand

d

x

x

duplicate_line

d

x

d

x

x

d

x

x

d

x

x

x

e

e

x

e

x

slurp_find_string

e

x

x

slurp_replace_string

e

x

e

x

x

e

x

x

e

x

x

x

f

f

x

f

x

show_panel

{"panel": "find", "reverse": false}

f

x

x

show_panel

{"panel": "find_in_files"}

f

x

f

x

x

f

x

x

f

x

x

x

g

g

x

g

x

show_overlay

{"overlay": "goto", "text": ":"}

g

x

x

g

x

g

x

x

g

x

x

g

x

x

x

h

h

x

h

x

show_panel

{"panel": "replace", "reverse": false}

h

x

x

replace_next

h

x

h

x

x

h

x

x

h

x

x

x

i

i

x

i

x

show_panel

{"panel": "incremental_find", "reverse": false}

i

x

x

show_panel

{"panel": "incremental_find", "reverse": true}

i

x

i

x

x

i

x

x

i

x

x

x

j

j

x

j

x

j

x

x

join_lines

j

x

j

x

x

j

x

x

j

x

x

x

k

k

x

k

x

k

x

x

run_macro_file

{"file": "res://Packages/Default/Delete Line.sublime-macro"}

k

x

k

x

x

k

x

x

k

x

x

x

l

l

x

l

x

expand_selection

{"to": "line"}

l

x

x

split_selection_into_lines

l

x

expand_selection

{"to": "line_prev"}

l

x

x

l

x

x

l

x

x

x

m

m

x

m

x

move_to

{"to": "brackets"}

m

x

x

expand_selection

{"to": "brackets"}

m

x

m

x

x

m

x

x

m

x

x

x

n

n

x

n

x

new_file

n

x

x

new_window

n

x

n

x

x

n

x

x

n

x

x

x

o

o

x

o

x

prompt_open_file

o

x

x

o

x

switch_file

{"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "hh", "h", "ipp", "inl", "m", "mm"]}

o

x

x

switch_file

{"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "hh", "h", "ipp", "inl", "m", "mm"], "side_by_side": true}

o

x

x

o

x

x

x

p

p

x

p

x

show_overlay

{"overlay": "goto", "show_files": true}

p

x

x

show_overlay

{"overlay": "command_palette"}

p

x

p

x

x

prompt_select_workspace

p

x

x

p

x

x

x

show_scope_name

q

q

x

q

x

toggle_record_macro

q

x

x

run_macro

q

x

wrap_lines

q

x

x

q

x

x

q

x

x

x

r

r

x

r

x

show_overlay

{"overlay": "goto", "text": "@"}

r

x

x

goto_symbol_in_project

r

x

[14]

toggle_regex

r

x

x

r

x

x

r

x

x

x

s

s

x

s

x

save

{"async": true}

s

x

x

prompt_save_as

s

x

s

x

x

s

x

x

s

x

x

x

t

t

x

t

x

transpose

t

x

x

reopen_last_file

{"source": "window"}

t

x

t

x

x

t

x

x

t

x

x

x

u

u

x

u

x

soft_undo

u

x

x

soft_redo

u

x

u

x

x

u

x

x

u

x

x

x

v

v

x

v

x

paste

v

x

x

paste_and_indent

v

x

v

x

x

v

x

x

v

x

x

x

w

w

x

w

x

close

w

x

[15]

close_transient

w

x

x

close_window

w

x

[16]

toggle_whole_word

w

x

x

insert_snippet

{"name": "Packages/XML/Snippets/xml-long-tag.sublime-snippet"}

w

x

x

w

x

x

x

x

x

x

x

x

cut

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

y

y

x

y

x

redo_or_repeat

y

x

x

y

x

y

x

x

y

x

x

y

x

x

x

z

z

x

z

x

undo

z

x

x

redo

z

x

z

x

x

z

x

x

z

x

x

x

"context": [
  { "key": "selector", "operand": "(text.html, text.xml) - source", "match_all": true }
    // Does selector [(text.html, text.xml) - source] match scope at selection (for all selections)?
]
"context": [
  { "key": "panel_type"     , "operand": "find" }
    // Does focused Panel's type == "find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel_type"     , "operand": "find" }
    // Does focused Panel's type == "find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel_type"     , "operand": "find" }
    // Does focused Panel's type == "find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "group_has_transient_sheet" }
    // Does View group have a transient sheet?
]
"context": [
  { "key": "panel_type"     , "operand": "find" }
    // Does focused Panel's type == "find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]

9.1.3. Function Keys

F-Key General Topics:

F1 -
F2 - Bookmarks
F3 - Find
F4 - Build Results, Close File, Exit Sublime Text
F5 -
F6 - Spelling
F7 - Build (only one key mapped)
F8 -
F9 - Sort
F10 -
F11 - Screen State
F12 - Goto
Key:
     A = Alt
     C = Ctrl
     S = Shift
  Ctxt = Context

Key

A

C

S

Ctxt

Command

Args

f1

f1

x

f1

x

f1

x

x

f1

x

f1

x

x

f1

x

x

f1

x

x

x

f2

next_bookmark

f2

x

prev_bookmark

f2

x

toggle_bookmark

{"toggle_line": true}

f2

x

x

clear_bookmarks

f2

x

select_all_bookmarks

f2

x

x

f2

x

x

f2

x

x

x

f3

find_next

f3

x

find_prev

f3

x

find_under

f3

x

x

find_under_prev

f3

x

find_all_under

f3

x

x

f3

x

x

f3

x

x

x

f4

next_result

f4

x

prev_result

f4

x

close_file

f4

x

x

f4

x

f4

x

x

f4

x

x

f4

x

x

x

f5

f5

x

f5

x

f5

x

x

f5

x

f5

x

x

f5

x

x

f5

x

x

x

f6

toggle_setting

{"setting": "spell_check"}

f6

x

f6

x

next_misspelling

f6

x

x

prev_misspelling

f6

x

f6

x

x

f6

x

x

f6

x

x

x

f7

build

f7

x

f7

x

f7

x

x

f7

x

f7

x

x

f7

x

x

f7

x

x

x

f8

f8

x

f8

x

f8

x

x

f8

x

f8

x

x

f8

x

x

f8

x

x

x

f9

sort_lines

{"case_sensitive": false}

f9

x

f9

x

sort_lines

{"case_sensitive": true}

f9

x

x

f9

x

f9

x

x

f9

x

x

f9

x

x

x

f10

f10

x

context_menu

f10

x

f10

x

x

f10

x

f10

x

x

f10

x

x

f10

x

x

x

f11

toggle_full_screen

f11

x

toggle_distraction_free

f11

x

f11

x

x

f11

x

f11

x

x

f11

x

x

f11

x

x

x

f12

goto_definition

f12

[17]

auto_complete_open_link

f12

x

goto_reference

f12

x

goto_definition

{"clear_to_right": true, "side_by_side": true}

f12

x

x

goto_reference

{"clear_to_right": true, "side_by_side": true}

f12

x

f12

x

x

f12

x

x

f12

x

x

x

f13

f13

x

f13

x

f13

x

x

f13

x

f13

x

x

f13

x

x

f13

x

x

x

f14

f14

x

f14

x

f14

x

x

f14

x

f14

x

x

f14

x

x

f14

x

x

x

f15

f15

x

f15

x

f15

x

x

f15

x

f15

x

x

f15

x

x

f15

x

x

x

f16

f16

x

f16

x

f16

x

x

f16

x

f16

x

x

f16

x

x

f16

x

x

x

f17

f17

x

f17

x

f17

x

x

f17

x

f17

x

x

f17

x

x

f17

x

x

x

f18

f18

x

f18

x

f18

x

x

f18

x

f18

x

x

f18

x

x

f18

x

x

x

f19

f19

x

f19

x

f19

x

x

f19

x

f19

x

x

f19

x

x

f19

x

x

x

f20

f20

x

f20

x

f20

x

x

f20

x

f20

x

x

f20

x

x

f20

x

x

x

"context": [
  { "key": "auto_complete_visible" }
    // Is auto-complete, mini-auto-complete or async-auto-complete popup visible?
]

9.1.4. Symbol Keys

Key:
     A = Alt
     C = Ctrl
     S = Shift
  Ctxt = Context

Key

A

C

S

Ctxt

Command

Args

'

[18]

insert_snippet

{"contents": "'$0'"}

'

[19]

insert_snippet

{"contents": "'${0:$SELECTION}'"}

'

[20]

move

{"by": "characters", "forward": true}

'

x

'

x

'

x

x

'

x

'

x

x

'

x

x

'

x

x

x

,

,

x

,

x

prev_modification

,

x

x

,

x

,

x

x

,

x

x

,

x

x

x

-

-

x

-

x

decrease_font_size

-

x

x

-

x

jump_back

-

x

x

jump_forward

-

x

x

-

x

x

x

.

.

x

.

x

next_modification

.

x

x

.

x

close_tag

.

x

x

.

x

x

.

x

x

x

/

[21]

close_tag

{"insert_slash": true}

/

x

/

x

toggle_comment

{"block": false}

/

x

x

toggle_comment

{"block": true}

/

x

/

x

x

/

x

x

/

x

x

x

;

;

x

;

x

show_overlay

{"overlay": "goto", "text": "#"}

;

x

x

;

x

;

x

x

;

x

x

;

x

x

x

=

=

x

=

x

increase_font_size

=

x

x

=

x

=

x

x

=

x

x

=

x

x

x

[

[22]

insert_snippet

{"contents": "[$0]"}

[

[23]

insert_snippet

{"contents": "[${0:$SELECTION}]"}

[

x

[

x

unindent

[

x

x

fold

[

x

[

x

x

[

x

x

[

x

x

x

\

\

x

\

x

\

x

x

\

x

\

x

x

\

x

x

\

x

x

x

]

[24]

move

{"by": "characters", "forward": true}

]

x

]

x

indent

]

x

x

unfold

]

x

]

x

x

]

x

x

]

x

x

x

`

`

x

`

x

show_panel

{"panel": "console", "toggle": true}

`

x

x

`

x

`

x

x

`

x

x

`

x

x

x

!

!

x

!

x

!

x

x

!

x

!

x

x

!

x

x

!

x

x

x

"

[25]

insert_snippet

{"contents": "\"$0\""}

"

[26]

insert_snippet

{"contents": "\"${0:$SELECTION}\""}

"

[27]

move

{"by": "characters", "forward": true}

"

x

"

x

"

x

x

"

x

"

x

x

"

x

x

"

x

x

x

#

#

x

#

x

#

x

x

#

x

#

x

x

#

x

x

#

x

x

x

$

$

x

$

x

$

x

x

$

x

$

x

x

$

x

x

$

x

x

x

%

%

x

%

x

%

x

x

%

x

%

x

x

%

x

x

%

x

x

x

&

&

x

&

x

&

x

x

&

x

&

x

x

&

x

x

&

x

x

x

(

[28]

insert_snippet

{"contents": "($0)"}

(

[29]

insert_snippet

{"contents": "(${0:$SELECTION})"}

(

x

(

x

(

x

x

(

x

(

x

x

(

x

x

(

x

x

x

)

[30]

move

{"by": "characters", "forward": true}

)

x

)

x

)

x

x

)

x

)

x

x

)

x

x

)

x

x

x

*

*

x

*

x

*

x

x

*

x

*

x

x

*

x

x

*

x

x

x

+

+

x

+

x

increase_font_size

+

x

x

+

x

+

x

x

+

x

x

+

x

x

x

:

:

x

:

x

:

x

x

:

x

:

x

x

:

x

x

:

x

x

x

<

<

x

<

x

<

x

x

<

x

<

x

x

<

x

x

<

x

x

x

>

>

x

>

x

>

x

x

>

x

>

x

x

>

x

x

>

x

x

x

?

?

x

?

x

?

x

x

?

x

?

x

x

?

x

x

?

x

x

x

@

@

x

@

x

@

x

x

@

x

@

x

x

@

x

x

@

x

x

x

^

^

x

^

x

^

x

x

^

x

^

x

x

^

x

x

^

x

x

x

_

_

x

_

x

_

x

x

_

x

_

x

x

_

x

x

_

x

x

x

{

[31]

insert_snippet

{"contents": "{$0}"}

{

[32]

wrap_block

{"begin": "{", "end": "}"}

{

[33]

insert_snippet

{"contents": "{${0:$SELECTION}}"}

{

x

{

x

{

x

x

{

x

{

x

x

{

x

x

{

x

x

x

|

|

x

|

x

|

x

x

|

x

|

x

x

|

x

x

|

x

x

x

}

[34]

move

{"by": "characters", "forward": true}

}

x

}

x

}

x

x

}

x

}

x

x

}

x

x

}

x

x

x

~

~

x

~

x

~

x

x

~

x

~

x

x

~

x

x

~

x

x

x

"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains"    , "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true }
    // Does regex "^(?:\t| |\\)|]|\\}|>|$)" match any of the text between left edge of selection and EOL (for all selections)?,
  { "key": "preceding_text"            , "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true }
    // Does regex "['a-zA-Z0-9_]$" match none of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "eol_selector"              , "operator": "not_equal"         , "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true }
    // Does selector [string.quoted.single - punctuation.definition.string.end] NOT match scope at EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "operand": false, "match_all": true }
    // Is selection NOT empty (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^'", "match_all": true }
    // Does regex "^'" match any of the text between left edge of selection and EOL (for all selections)?,
  { "key": "selector"                  , "operator": "not_equal"     , "operand": "punctuation.definition.string.begin", "match_all": true }
    // Does selector [punctuation.definition.string.begin] NOT match scope at selection (for all selections)?,
  { "key": "eol_selector"              , "operator": "not_equal"     , "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true }
    // Does selector [string.quoted.single - punctuation.definition.string.end] NOT match scope at EOL (for all selections)?
]
"context": [
  { "key": "selector"               , "operand": "(text.html, text.xml) - string - comment", "match_all": true }
    // Does selector [(text.html, text.xml) - string - comment] match scope at selection (for all selections)?,
  { "key": "preceding_text"         , "operator": "regex_match", "operand": ".*<$", "match_all": true }
    // Does regex ".*<$" fully match the text between BOL and the left edge of selection (for all selections)?,
  { "key": "setting.auto_close_tags" }
    // Is the View-setting [auto_close_tags] == true?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
    // Does regex "^(?:\t| |\\)|]|;|\\}|$)" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "operand": false, "match_all": true }
    // Is selection NOT empty (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^\\]", "match_all": true }
    // Does regex "^\\]" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains"    , "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true }
    // Does regex "^(?:\t| |\\)|]|\\}|>|$)" match any of the text between left edge of selection and EOL (for all selections)?,
  { "key": "preceding_text"            , "operator": "not_regex_contains", "operand": "[\"a-zA-Z0-9_]$", "match_all": true }
    // Does regex "[\"a-zA-Z0-9_]$" match none of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "eol_selector"              , "operator": "not_equal"         , "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true }
    // Does selector [string.quoted.double - punctuation.definition.string.end] NOT match scope at EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "operand": false, "match_all": true }
    // Is selection NOT empty (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^\"", "match_all": true }
    // Does regex "^\"" match any of the text between left edge of selection and EOL (for all selections)?,
  { "key": "selector"                  , "operator": "not_equal"     , "operand": "punctuation.definition.string.begin", "match_all": true }
    // Does selector [punctuation.definition.string.begin] NOT match scope at selection (for all selections)?,
  { "key": "eol_selector"              , "operator": "not_equal"     , "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true }
    // Does selector [string.quoted.double - punctuation.definition.string.end] NOT match scope at EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
    // Does regex "^(?:\t| |\\)|]|;|\\}|$)" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "operand": false, "match_all": true }
    // Is selection NOT empty (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^\\)", "match_all": true }
    // Does regex "^\\)" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|$)", "match_all": true }
    // Does regex "^(?:\t| |\\)|]|\\}|$)" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "indented_block"            , "match_all": true }
    // Is current block indented (for all selections)?,
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "following_text"            , "operator": "regex_match", "operand": "^$", "match_all": true }
    // Does regex "^$" fully match the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "operand": false, "match_all": true }
    // Is selection NOT empty (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^\\}", "match_all": true }
    // Does regex "^\\}" match any of the text between left edge of selection and EOL (for all selections)?
]

9.1.5. Named Keys

Key:
     A = Alt
     C = Ctrl
     S = Shift
  Ctxt = Context

Key

A

C

S

Ctxt

Command

Args

up

move

{"by": "lines", "forward": false}

up

x

move

{"by": "lines", "extend": true, "forward": false}

up

x

scroll_lines

{"amount": 1.0}

up

x

x

swap_line_up

up

x

up

x

x

up

x

x

select_lines

{"forward": false}

up

x

x

x

down

move

{"by": "lines", "forward": true}

down

x

move

{"by": "lines", "extend": true, "forward": true}

down

x

scroll_lines

{"amount": -1.0}

down

x

x

swap_line_down

down

x

down

x

x

down

x

x

select_lines

{"forward": true}

down

x

x

x

left

move

{"by": "characters", "forward": false}

left

x

move

{"by": "characters", "extend": true, "forward": false}

left

x

move

{"by": "words", "forward": false}

left

x

x

move

{"by": "words", "extend": true, "forward": false}

left

x

move

{"by": "subwords", "forward": false}

left

x

x

move

{"by": "subwords", "extend": true, "forward": false}

left

x

x

left

x

x

x

right

move

{"by": "characters", "forward": true}

right

x

move

{"by": "characters", "extend": true, "forward": true}

right

x

move

{"by": "word_ends", "forward": true}

right

x

x

move

{"by": "word_ends", "extend": true, "forward": true}

right

x

move

{"by": "subword_ends", "forward": true}

right

x

x

move

{"by": "subword_ends", "extend": true, "forward": true}

right

x

x

right

x

x

x

insert

toggle_overwrite

insert

x

paste

insert

x

copy

insert

x

x

insert

x

insert

x

x

insert

x

x

insert

x

x

x

delete

right_delete

delete

x

cut

delete

x

delete_word

{"forward": true}

delete

x

x

run_macro_file

{"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"}

delete

x

delete

x

x

delete

x

x

delete

x

x

x

home

move_to

{"extend": false, "to": "bol"}

home

x

move_to

{"extend": true, "to": "bol"}

home

x

move_to

{"extend": false, "to": "bof"}

home

x

x

move_to

{"extend": true, "to": "bof"}

home

x

home

x

x

home

x

x

home

x

x

x

end

move_to

{"extend": false, "to": "eol"}

end

x

move_to

{"extend": true, "to": "eol"}

end

x

move_to

{"extend": false, "to": "eof"}

end

x

x

move_to

{"extend": true, "to": "eof"}

end

x

end

x

x

end

x

x

end

x

x

x

pageup

move

{"by": "pages", "forward": false}

pageup

x

move

{"by": "pages", "extend": true, "forward": false}

pageup

x

prev_view

pageup

x

x

prev_view

{"extend": true}

pageup

x

pageup

x

x

pageup

x

x

pageup

x

x

x

pagedown

move

{"by": "pages", "forward": true}

pagedown

x

move

{"by": "pages", "extend": true, "forward": true}

pagedown

x

next_view

pagedown

x

x

next_view

{"extend": true}

pagedown

x

pagedown

x

x

pagedown

x

x

pagedown

x

x

x

backspace

left_delete

backspace

[35]

run_macro_file

{"file": "res://Packages/Default/Delete Left Right.sublime-macro"}

backspace

[36]

run_macro_file

{"file": "res://Packages/Default/Delete Left Right.sublime-macro"}

backspace

[37]

run_macro_file

{"file": "res://Packages/Default/Delete Left Right.sublime-macro"}

backspace

[38]

run_macro_file

{"file": "res://Packages/Default/Delete Left Right.sublime-macro"}

backspace

[39]

run_macro_file

{"file": "res://Packages/Default/Delete Left Right.sublime-macro"}

backspace

x

left_delete

backspace

x

delete_word

{"forward": false}

backspace

x

x

left_delete

backspace

x

x

run_macro_file

{"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"}

backspace

x

backspace

x

x

backspace

x

x

backspace

x

x

x

tab

insert

{"characters": "\t"}

tab

[40]

auto_complete

{"commit_single": true, "default": "\t", "mini": true}

tab

[41]

auto_complete

{"default": "\t", "snippets_only": true}

tab

[42]

expand_snippet

tab

[43]

reindent

tab

[44]

indent

tab

[45]

move

{"by": "lines", "forward": true}

tab

[46]

next_field

tab

[47]

commit_completion

tab

x

insert

{"characters": "\t"}

tab

x

[48]

unindent

tab

x

[49]

unindent

tab

x

[50]

unindent

tab

x

[51]

move

{"by": "lines", "forward": false}

tab

x

[52]

prev_field

tab

x

next_view_in_stack

tab

x

x

prev_view_in_stack

tab

x

tab

x

x

tab

x

x

tab

x

x

x

enter

insert

{"characters": "\n"}

enter

[53]

select

enter

[54]

commit_completion

enter

[55]

run_macro_file

{"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}

enter

[56]

auto_indent_tag

enter

[57]

insert

{"characters": "\n* "}

enter

[58]

insert

{"characters": "\n * "}

enter

[59]

select

enter

[60]

select

enter

[61]

find_next

enter

[62]

find_next

enter

[63]

hide_panel

enter

[64]

find_all

enter

x

insert

{"characters": "\n"}

enter

x

[65]

select

{"extend": true}

enter

x

[66]

run_macro_file

{"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}

enter

x

[67]

auto_indent_tag

enter

x

[68]

find_prev

enter

x

[69]

find_prev

enter

x

[70]

chain

{"commands": [{"command": "find_prev"}, {"command": "hide_panel"}]}

enter

x

[71]

select

{"clear_to_right": true, "extend": true}

enter

x

[72]

run_macro_file

{"file": "res://Packages/Default/Add Line.sublime-macro"}

enter

x

x

run_macro_file

{"file": "res://Packages/Default/Add Line Before.sublime-macro"}

enter

x

[73]

select

{"replace": true}

enter

x

[74]

find_all

{"close_panel": true}

enter

x

[75]

find_all

{"close_panel": true}

enter

x

[76]

find_all

{"close_panel": true}

enter

x

[77]

find_all

enter

x

x

enter

x

x

[78]

replace_all

{"close_panel": true}

enter

x

x

[79]

replace_all

enter

x

x

x

pause

pause

x

pause

x

pause

x

x

pause

x

pause

x

x

pause

x

x

pause

x

x

x

break

break

x

break

x

cancel_build

break

x

x

break

x

break

x

x

break

x

x

break

x

x

x

space

space

x

space

x

auto_complete

space

x

[80]

move

{"by": "lines", "forward": true}

space

x

x

expand_selection

{"to": "scope"}

space

x

space

x

x

space

x

x

space

x

x

x

escape

cancel

escape

[81]

single_selection

escape

[82]

clear_fields

escape

[83]

clear_fields

escape

[84]

hide_panel

{"cancel": true}

escape

[85]

hide_overlay

escape

[86]

hide_auto_complete

escape

[87]

hide_popup

escape

x

[88]

show_panel

{"panel": "output.exec"}

escape

x

escape

x

x

escape

x

escape

x

x

escape

x

x

escape

x

x

x

context_menu

context_menu

context_menu

x

context_menu

x

context_menu

x

x

context_menu

x

context_menu

x

x

context_menu

x

x

context_menu

x

x

x

backquote

backquote

x

backquote

x

backquote

x

x

backquote

x

backquote

x

x

backquote

x

x

backquote

x

x

x

equals

equals

x

equals

x

increase_font_size

equals

x

x

decrease_font_size

equals

x

equals

x

x

equals

x

x

equals

x

x

x

forward_slash

forward_slash

x

forward_slash

x

forward_slash

x

x

forward_slash

x

forward_slash

x

x

forward_slash

x

x

forward_slash

x

x

x

minus

minus

x

minus

x

minus

x

x

minus

x

minus

x

x

minus

x

x

minus

x

x

x

plus

plus

x

plus

x

plus

x

x

plus

x

plus

x

x

plus

x

x

plus

x

x

x

close

close

x

close

x

close

x

x

close

x

close

x

x

close

x

x

close

x

x

x

copy

copy

x

copy

x

copy

x

x

copy

x

copy

x

x

copy

x

x

copy

x

x

x

cut

cut

x

cut

x

cut

x

x

cut

x

cut

x

x

cut

x

x

cut

x

x

x

find

find

x

find

x

find

x

x

find

x

find

x

x

find

x

x

find

x

x

x

open

open

x

open

x

open

x

x

open

x

open

x

x

open

x

x

open

x

x

x

paste

paste

x

paste

x

paste

x

x

paste

x

paste

x

x

paste

x

x

paste

x

x

x

redo

redo

x

redo

x

redo

x

x

redo

x

redo

x

x

redo

x

x

redo

x

x

x

save

save

x

save

x

save

x

x

save

x

save

x

x

save

x

x

save

x

x

x

sysreq

sysreq

x

sysreq

x

sysreq

x

x

sysreq

x

sysreq

x

x

sysreq

x

x

sysreq

x

x

x

undo

undo

x

undo

x

undo

x

x

undo

x

undo

x

x

undo

x

x

undo

x

x

x

browser_back

browser_back

x

browser_back

x

browser_back

x

x

browser_back

x

browser_back

x

x

browser_back

x

x

browser_back

x

x

x

browser_favorites

browser_favorites

x

browser_favorites

x

browser_favorites

x

x

browser_favorites

x

browser_favorites

x

x

browser_favorites

x

x

browser_favorites

x

x

x

browser_forward

browser_forward

x

browser_forward

x

browser_forward

x

x

browser_forward

x

browser_forward

x

x

browser_forward

x

x

browser_forward

x

x

x

browser_home

browser_home

x

browser_home

x

browser_home

x

x

browser_home

x

browser_home

x

x

browser_home

x

x

browser_home

x

x

x

browser_refresh

browser_refresh

x

browser_refresh

x

browser_refresh

x

x

browser_refresh

x

browser_refresh

x

x

browser_refresh

x

x

browser_refresh

x

x

x

browser_search

browser_search

x

browser_search

x

browser_search

x

x

browser_search

x

browser_search

x

x

browser_search

x

x

browser_search

x

x

x

browser_stop

browser_stop

x

browser_stop

x

browser_stop

x

x

browser_stop

x

browser_stop

x

x

browser_stop

x

x

browser_stop

x

x

x

<character>

<character>

x

<character>

x

<character>

x

x

<character>

x

<character>

x

x

<character>

x

x

<character>

x

x

x

"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "preceding_text"            , "operator": "regex_contains", "operand": "\"$", "match_all": true }
    // Does regex "\"$" match any of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^\"", "match_all": true }
    // Does regex "^\"" match any of the text between left edge of selection and EOL (for all selections)?,
  { "key": "selector"                  , "operator": "not_equal"     , "operand": "punctuation.definition.string.begin", "match_all": true }
    // Does selector [punctuation.definition.string.begin] NOT match scope at selection (for all selections)?,
  { "key": "eol_selector"              , "operator": "not_equal"     , "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true }
    // Does selector [string.quoted.double - punctuation.definition.string.end] NOT match scope at EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "preceding_text"            , "operator": "regex_contains", "operand": "'$", "match_all": true }
    // Does regex "'$" match any of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^'", "match_all": true }
    // Does regex "^'" match any of the text between left edge of selection and EOL (for all selections)?,
  { "key": "selector"                  , "operator": "not_equal"     , "operand": "punctuation.definition.string.begin", "match_all": true }
    // Does selector [punctuation.definition.string.begin] NOT match scope at selection (for all selections)?,
  { "key": "eol_selector"              , "operator": "not_equal"     , "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true }
    // Does selector [string.quoted.single - punctuation.definition.string.end] NOT match scope at EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "preceding_text"            , "operator": "regex_contains", "operand": "\\($", "match_all": true }
    // Does regex "\\($" match any of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^\\)", "match_all": true }
    // Does regex "^\\)" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "preceding_text"            , "operator": "regex_contains", "operand": "\\[$", "match_all": true }
    // Does regex "\\[$" match any of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^\\]", "match_all": true }
    // Does regex "^\\]" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_match_enabled" }
    // Is the View-setting [auto_match_enabled] == true?,
  { "key": "selection_empty"           , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "preceding_text"            , "operator": "regex_contains", "operand": "\\{$", "match_all": true }
    // Does regex "\\{$" match any of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"            , "operator": "regex_contains", "operand": "^\\}", "match_all": true }
    // Does regex "^\\}" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "auto_complete_visible" , "operand": false }
    // Is auto-complete, mini-auto-complete or async-auto-complete popup NOT visible?,
  { "key": "selection_empty"       , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "setting.tab_completion" }
    // Is the View-setting [tab_completion] == true?,
  { "key": "preceding_text"        , "operator": "regex_match", "operand": ".*\\w", "match_all": true }
    // Does regex ".*\\w" fully match the text between BOL and the left edge of selection (for all selections)?
]
"context": [
  { "key": "auto_complete_visible" , "operand": false }
    // Is auto-complete, mini-auto-complete or async-auto-complete popup NOT visible?,
  { "key": "selection_empty"       , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "setting.tab_completion", "operand": false }
    // Is the View-setting [tab_completion] == false?,
  { "key": "preceding_text"        , "operator": "regex_match", "operand": ".*\\w", "match_all": true }
    // Does regex ".*\\w" fully match the text between BOL and the left edge of selection (for all selections)?
]
"context": [
  { "key": "has_snippet" }
    // Can preceding word trigger a Snippet?
]
"context": [
  { "key": "setting.auto_indent" }
    // Is the View-setting [auto_indent] == true?,
  { "key": "selection_empty"    , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "preceding_text"     , "operator": "regex_match", "operand": "^$", "match_all": true }
    // Does regex "^$" fully match the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"     , "operator": "regex_match", "operand": "^$", "match_all": true }
    // Does regex "^$" fully match the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "text", "operator": "regex_contains", "operand": "\n" }
    // Does regex "\n" match any of the selected text?
]
"context": [
  { "key": "overlay_has_focus" }
    // Does an Overlay or Quick Panel have focus?
]
"context": [
  { "key": "has_next_field" }
    // Is selection in Snippet field list with subsequent fields?
]
"context": [
  { "key": "auto_complete_visible" }
    // Is auto-complete, mini-auto-complete or async-auto-complete popup visible?
]
"context": [
  { "key": "setting.shift_tab_unindent" }
    // Is the View-setting [shift_tab_unindent] == true?
]
"context": [
  { "key": "preceding_text", "operator": "regex_match", "operand": "^[\t ]*" }
    // Does regex "^[\t ]*" fully match the text between BOL and the left edge of selection?
]
"context": [
  { "key": "text", "operator": "regex_contains", "operand": "\n" }
    // Does regex "\n" match any of the selected text?
]
"context": [
  { "key": "overlay_visible" }
    // Is any Overlay or Quick Panel visible?
]
"context": [
  { "key": "has_prev_field" }
    // Is selection in Snippet field list with previous fields?
]
"context": [
  { "key": "overlay_has_focus" }
    // Does an Overlay or Quick Panel have focus?
]
"context": [
  { "key": "auto_complete_visible"               }
    // Is auto-complete, mini-auto-complete or async-auto-complete popup visible?,
  { "key": "setting.auto_complete_commit_on_tab", "operand": false }
    // Is the View-setting [auto_complete_commit_on_tab] == false?
]
"context": [
  { "key": "setting.auto_indent" }
    // Is the View-setting [auto_indent] == true?,
  { "key": "selection_empty"    , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "preceding_text"     , "operator": "regex_contains", "operand": "\\{$", "match_all": true }
    // Does regex "\\{$" match any of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"     , "operator": "regex_contains", "operand": "^\\}", "match_all": true }
    // Does regex "^\\}" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_indent" }
    // Is the View-setting [auto_indent] == true?,
  { "key": "selection_empty"    , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "selector"           , "operand": "punctuation.definition.tag.begin", "match_all": true }
    // Does selector [punctuation.definition.tag.begin] match scope at selection (for all selections)?,
  { "key": "preceding_text"     , "operator": "regex_contains", "operand": ">$", "match_all": true }
    // Does regex ">$" match any of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"     , "operator": "regex_contains", "operand": "^</", "match_all": true }
    // Does regex "^</" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_indent" }
    // Is the View-setting [auto_indent] == true?,
  { "key": "selection_empty"    , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "selector"           , "operand": "source comment", "match_all": true }
    // Does selector [source comment] match scope at selection (for all selections)?,
  { "key": "preceding_text"     , "operator": "regex_contains", "operand": "^\\s*\\*", "match_all": true }
    // Does regex "^\\s*\\*" match any of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"     , "operator": "regex_match"   , "operand": "(?!/).*", "match_all": true }
    // Does regex "(?!/).*" fully match the text between left edge of selection and EOL (for all selections)?,
  { "key": "is_javadoc"         , "match_all": true }
    // Is selection within a Javadoc comment (for all selections)?
]
"context": [
  { "key": "setting.auto_indent" }
    // Is the View-setting [auto_indent] == true?,
  { "key": "selection_empty"    , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "selector"           , "operand": "source comment", "match_all": true }
    // Does selector [source comment] match scope at selection (for all selections)?,
  { "key": "preceding_text"     , "operator": "regex_contains", "operand": "^\\s*/\\*[*!]", "match_all": true }
    // Does regex "^\\s*/\\*[*!]" match any of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"     , "operator": "regex_match"   , "operand": "(?!/).*", "match_all": true }
    // Does regex "(?!/).*" fully match the text between left edge of selection and EOL (for all selections)?,
  { "key": "is_javadoc"         , "match_all": true }
    // Is selection within a Javadoc comment (for all selections)?
]
"context": [
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?,
  { "key": "panel_type"     , "operand": "input" }
    // Does focused Panel's type == "input"?
]
"context": [
  { "key": "overlay_has_focus" }
    // Does an Overlay or Quick Panel have focus?
]
"context": [
  { "key": "panel"          , "operand": "find" }
    // Is current visible Panel's name == "find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "replace" }
    // Is current visible Panel's name == "replace"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "incremental_find" }
    // Is current visible Panel's name == "incremental_find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "find_in_files" }
    // Is current visible Panel's name == "find_in_files"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "overlay_has_focus" }
    // Does an Overlay or Quick Panel have focus?,
  { "key": "overlay_name"     , "operand": "goto" }
    // Does current Overlay's name == "goto"?
]
"context": [
  { "key": "setting.auto_indent" }
    // Is the View-setting [auto_indent] == true?,
  { "key": "selection_empty"    , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "preceding_text"     , "operator": "regex_contains", "operand": "\\{$", "match_all": true }
    // Does regex "\\{$" match any of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"     , "operator": "regex_contains", "operand": "^\\}", "match_all": true }
    // Does regex "^\\}" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "setting.auto_indent" }
    // Is the View-setting [auto_indent] == true?,
  { "key": "selection_empty"    , "match_all": true }
    // Is selection empty (for all selections)?,
  { "key": "selector"           , "operand": "punctuation.definition.tag.begin", "match_all": true }
    // Does selector [punctuation.definition.tag.begin] match scope at selection (for all selections)?,
  { "key": "preceding_text"     , "operator": "regex_contains", "operand": ">$", "match_all": true }
    // Does regex ">$" match any of the text between BOL and the left edge of selection (for all selections)?,
  { "key": "following_text"     , "operator": "regex_contains", "operand": "^</", "match_all": true }
    // Does regex "^</" match any of the text between left edge of selection and EOL (for all selections)?
]
"context": [
  { "key": "panel"          , "operand": "find" }
    // Is current visible Panel's name == "find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "replace" }
    // Is current visible Panel's name == "replace"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "incremental_find" }
    // Is current visible Panel's name == "incremental_find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "overlay_has_focus" }
    // Does an Overlay or Quick Panel have focus?,
  { "key": "overlay_name"     , "operand": "goto" }
    // Does current Overlay's name == "goto"?
]
"context": [
  { "key": "overlay_has_focus", "operand": false }
    // Does an Overlay or Quick Panel NOT have focus?
]
"context": [
  { "key": "overlay_has_focus" }
    // Does an Overlay or Quick Panel have focus?,
  { "key": "overlay_name"     , "operand": "goto" }
    // Does current Overlay's name == "goto"?
]
"context": [
  { "key": "panel"          , "operand": "find" }
    // Is current visible Panel's name == "find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "replace" }
    // Is current visible Panel's name == "replace"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "incremental_find" }
    // Is current visible Panel's name == "incremental_find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "find_in_files" }
    // Is current visible Panel's name == "find_in_files"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "replace" }
    // Is current visible Panel's name == "replace"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "find_in_files" }
    // Is current visible Panel's name == "find_in_files"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "auto_complete_primed" }
    // Is actual auto-complete popup visible?
]
"context": [
  { "key": "num_selections", "operator": "not_equal" }
    // Number of selections != 1?
]
"context": [
  { "key": "has_next_field" }
    // Is selection in Snippet field list with subsequent fields?
]
"context": [
  { "key": "has_prev_field" }
    // Is selection in Snippet field list with previous fields?
]
"context": [
  { "key": "panel_visible" }
    // Is any Panel visible?
]
"context": [
  { "key": "overlay_visible" }
    // Is any Overlay or Quick Panel visible?,
  { "key": "panel_has_focus", "operand": false }
    // Are there no Panels visible with focus?
]
"context": [
  { "key": "auto_complete_visible" }
    // Is auto-complete, mini-auto-complete or async-auto-complete popup visible?
]
"context": [
  { "key": "popup_visible" }
    // Is any Popup currently being displayed?
]
"context": [
  { "key": "panel_visible", "operand": false }
    // Are there no Panels visible?
]

9.1.5.1. Tab Key

The Tab key’s behavior is context sensitive. The below are in top-to-bottom order from within the default key map, so the top-most items are the most general, and the bottom-most items are the most specific, overriding the upper choices, but only when they apply.

  • Insert ‘t’ into View with focus.

  • Unless:

    • an auto-complete pop-up is NOT visible, and

    • no text is selected, and

    • tab_completion setting == true, and

    • caret is immediately after a word character (regex \w)

    • then, Tab executes

      • “auto_complete”, “args”: {“mini”: true, “default”: “t”, “commit_single”: true}

  • Unless:

    • same as above except tab_completion setting == false

    • then, Tab executes

      • “auto_complete”, “args”: {“snippets_only”: true, “default”: “t”}

  • Unless:

    • caret is in a context in which the keymap context condition “has_snippet” == true

    • then Tab executes expand_snippet command with no arguments.

  • Unless:

    • setting.auto_indent == true, and

    • no text is selected for all carets, and

    • all carets are on a blank line (preceded and followed by empty strings), and

    • then Tab executes reindent with no arguments.

  • Unless:

    • multiple lines are selected (selected text contains ‘n’)

    • then Tab executes indent with no arguments.

  • Unless:

    • overlay_has_focus == true

    • then Tab executes move with “args”: {“by”: “lines”, “forward”: true}.

  • Unless:

    • has_next_field == true

    • then Tab executes next_field with no arguments.

  • Unless:

    • auto_complete_visible == true

    • then Tab executes commit_completion with no arguments.

9.1.5.2. Shift Tab

The Shift-Tab is also context sensitive. In order from top-to-bottom in keymap (same ramifications as above):

  • Insert ‘t’ into View with focus.

  • Unless:

    • shift_tab_unindent == true

    • then Tab executes unindent with no arguments.

  • Unless:

    • preceding_text matches ^[\t ]* (caret is at BOL or preceeded only by whitespace)

    • then Tab executes unindent with no arguments.

  • Unless:

    • multiple lines are selected (selected text contains ‘n’)

    • then Tab executes unindent with no arguments.

  • Unless:

    • overlay_visible == true

    • then Tab executes move with “args”: {“by”: “lines”, “forward”: false}.

  • Unless:

    • has_prev_field == true

    • then Tab executes prev_field with no arguments (snippet or panel).

9.1.6. Keypad Keys

For keyboards that have a keypad, you can also map these keys. On Windows systems, keypad0-keypad9 keys are generally not useful to map in Sublime Text because most, if not all of them, are mapped by the OS to do other things, which makes them “appear” to be number keys, arrow keys, Home, End, Insert, Delete, PgUp and PgDn keys, etc. depending on the state of the NumLock mode. For example, binding Alt-KeypadN (where ‘N’ is [0-9]) keys does not work in Windows because the OS hooks these keypresses to produce input characters outside of the ASCII range. Example:

  • Alt-Keypad0

  • Alt-Keypad2

  • Alt-Keypad2

  • Alt-Keypad5

followed by releasing the Alt key produces á. Many otherwise-inaccessible characters, including many Unicode characters, can be produced on the keyboard this way.

Thus, while these keypresses are listed below, they are not recommended to be mapped on Windows because the OS will most likely interfere with your use of them.

Also, when NumLock is OFF, the keypad_period key is mapped to the various ...-Del keypresses.

However, keypresses with:

  • keypad_period (NumLock ON)

  • keypad_divide

  • keypad_multiply

  • keypad_minus

  • keypad_plus

  • keypad_enter

are mapped by Sublime Text and work reliably and can be mapped or re-mapped as you see fit.

Key

A

C

S

Command

keypad0-9

when NumLock ON, produces digits 0-9 respectively

keypad0-9

when NumLock OFF, OS maps these to Insert, End, Down, etc.

keypad0-9

x

when NumLock ON, OS maps these to Insert, End, Down, etc.

keypad0-9

x

when NumLock OFF, OS maps these to Shift-Home, Shift-End, etc.

keypad0-9

x

when NumLock ON, OS maps these to Ctrl-Home, Ctrl-End, etc.

keypad0-9

x

when NumLock OFF, OS maps these to Ctrl-Home, Ctrl-End, etc.

keypad0-9

x

x

when NumLock ON, OS maps these to Ctrl-Home, Ctrl-End, etc.

keypad0-9

x

x

when NumLock OFF, OS maps these to Ctrl-Home, Ctrl-End, etc.

keypad0-9

x

when NumLock ON, OS maps these to producing special characters

Key:
     A = Alt
     C = Ctrl
     S = Shift
  Ctxt = Context

Key

A

C

S

Ctxt

Command

Args

keypad0

keypad0

x

keypad0

x

keypad0

x

x

keypad0

x

keypad0

x

x

keypad0

x

x

keypad0

x

x

x

keypad1

keypad1

x

keypad1

x

keypad1

x

x

keypad1

x

keypad1

x

x

keypad1

x

x

keypad1

x

x

x

keypad2

keypad2

x

keypad2

x

keypad2

x

x

keypad2

x

keypad2

x

x

keypad2

x

x

keypad2

x

x

x

keypad3

keypad3

x

keypad3

x

keypad3

x

x

keypad3

x

keypad3

x

x

keypad3

x

x

keypad3

x

x

x

keypad4

keypad4

x

keypad4

x

keypad4

x

x

keypad4

x

keypad4

x

x

keypad4

x

x

keypad4

x

x

x

keypad5

keypad5

x

keypad5

x

keypad5

x

x

keypad5

x

keypad5

x

x

keypad5

x

x

keypad5

x

x

x

keypad6

keypad6

x

keypad6

x

keypad6

x

x

keypad6

x

keypad6

x

x

keypad6

x

x

keypad6

x

x

x

keypad7

keypad7

x

keypad7

x

keypad7

x

x

keypad7

x

keypad7

x

x

keypad7

x

x

keypad7

x

x

x

keypad8

keypad8

x

keypad8

x

keypad8

x

x

keypad8

x

keypad8

x

x

keypad8

x

x

keypad8

x

x

x

keypad9

keypad9

x

keypad9

x

keypad9

x

x

keypad9

x

keypad9

x

x

keypad9

x

x

keypad9

x

x

x

keypad_period

keypad_period

x

keypad_period

x

keypad_period

x

x

keypad_period

x

keypad_period

x

x

keypad_period

x

x

keypad_period

x

x

x

keypad_divide

keypad_divide

x

keypad_divide

x

keypad_divide

x

x

keypad_divide

x

keypad_divide

x

x

keypad_divide

x

x

keypad_divide

x

x

x

keypad_multiply

keypad_multiply

x

keypad_multiply

x

keypad_multiply

x

x

keypad_multiply

x

keypad_multiply

x

x

keypad_multiply

x

x

keypad_multiply

x

x

x

keypad_minus

keypad_minus

x

keypad_minus

x

decrease_font_size

keypad_minus

x

x

keypad_minus

x

jump_back

keypad_minus

x

x

jump_forward

keypad_minus

x

x

keypad_minus

x

x

x

keypad_plus

keypad_plus

x

keypad_plus

x

increase_font_size

keypad_plus

x

x

decrease_font_size

keypad_plus

x

keypad_plus

x

x

keypad_plus

x

x

keypad_plus

x

x

x

keypad_enter

insert

{"characters": "\n"}

keypad_enter

[89]

select

keypad_enter

[90]

commit_completion

keypad_enter

[91]

select

keypad_enter

[92]

select

keypad_enter

[93]

find_next

keypad_enter

[94]

find_next

keypad_enter

[95]

hide_panel

keypad_enter

[96]

find_all

keypad_enter

x

insert

{"characters": "\n"}

keypad_enter

x

[97]

select

{"extend": true}

keypad_enter

x

[98]

find_prev

keypad_enter

x

[99]

find_prev

keypad_enter

x

[100]

chain

{"commands": [{"command": "find_prev"}, {"command": "hide_panel"}]}

keypad_enter

x

[101]

select

{"clear_to_right": true, "extend": true}

keypad_enter

x

[102]

run_macro_file

{"file": "res://Packages/Default/Add Line.sublime-macro"}

keypad_enter

x

x

run_macro_file

{"file": "res://Packages/Default/Add Line Before.sublime-macro"}

keypad_enter

x

[103]

select

{"replace": true}

keypad_enter

x

[104]

find_all

{"close_panel": true}

keypad_enter

x

[105]

find_all

{"close_panel": true}

keypad_enter

x

[106]

find_all

{"close_panel": true}

keypad_enter

x

[107]

find_all

keypad_enter

x

x

keypad_enter

x

x

[108]

replace_all

{"close_panel": true}

keypad_enter

x

x

[109]

replace_all

keypad_enter

x

x

x

clear

clear

x

clear

x

clear

x

x

clear

x

clear

x

x

clear

x

x

clear

x

x

x

"context": [
  { "key": "overlay_has_focus" }
    // Does an Overlay or Quick Panel have focus?
]
"context": [
  { "key": "auto_complete_visible"               }
    // Is auto-complete, mini-auto-complete or async-auto-complete popup visible?,
  { "key": "setting.auto_complete_commit_on_tab", "operand": false }
    // Is the View-setting [auto_complete_commit_on_tab] == false?
]
"context": [
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?,
  { "key": "panel_type"     , "operand": "input" }
    // Does focused Panel's type == "input"?
]
"context": [
  { "key": "overlay_has_focus" }
    // Does an Overlay or Quick Panel have focus?
]
"context": [
  { "key": "panel"          , "operand": "find" }
    // Is current visible Panel's name == "find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "replace" }
    // Is current visible Panel's name == "replace"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "incremental_find" }
    // Is current visible Panel's name == "incremental_find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "find_in_files" }
    // Is current visible Panel's name == "find_in_files"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "overlay_has_focus" }
    // Does an Overlay or Quick Panel have focus?,
  { "key": "overlay_name"     , "operand": "goto" }
    // Does current Overlay's name == "goto"?
]
"context": [
  { "key": "panel"          , "operand": "find" }
    // Is current visible Panel's name == "find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "replace" }
    // Is current visible Panel's name == "replace"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "incremental_find" }
    // Is current visible Panel's name == "incremental_find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "overlay_has_focus" }
    // Does an Overlay or Quick Panel have focus?,
  { "key": "overlay_name"     , "operand": "goto" }
    // Does current Overlay's name == "goto"?
]
"context": [
  { "key": "overlay_has_focus", "operand": false }
    // Does an Overlay or Quick Panel NOT have focus?
]
"context": [
  { "key": "overlay_has_focus" }
    // Does an Overlay or Quick Panel have focus?,
  { "key": "overlay_name"     , "operand": "goto" }
    // Does current Overlay's name == "goto"?
]
"context": [
  { "key": "panel"          , "operand": "find" }
    // Is current visible Panel's name == "find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "replace" }
    // Is current visible Panel's name == "replace"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "incremental_find" }
    // Is current visible Panel's name == "incremental_find"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "find_in_files" }
    // Is current visible Panel's name == "find_in_files"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "replace" }
    // Is current visible Panel's name == "replace"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]
"context": [
  { "key": "panel"          , "operand": "find_in_files" }
    // Is current visible Panel's name == "find_in_files"?,
  { "key": "panel_has_focus" }
    // Is any Panel visible with focus?
]

9.1.7. Leading Key: Ctrl-J

In earlier versions of Sublime Text, the default key binding for Ctrl-J was mapped to the join_lines command, which is similar to moving the caret to the end of the current line and hitting the Delete key, but it reduces all the whitespace between the two lines (including the newline between lines) to exactly 1 space, and the caret need not be at the end of the line when it is performed.

This key binding was moved to Ctrl-Shift-J in order to free up the Ctrl-J key binding to be the leading key in a number of keypress sequences. ["ctrl+j", "ctrl+j"] now opens a message box that explains how the previous binding of Ctrl-J (join lines) was switched to Ctrl-Shift-J. All of the remaining key sequences beginning with Ctrl-J are now mapped to Side-by-Side Editing Commands.

In the table below, we use the term “select” in the same way we use that term in Side-by-Side Editing, indicating that “selected” Sheets are temporarily participating (selected) in side-by-side editing. The term “select” is also used with the same meaning in the names of the Commands that these key sequences are mapped to (in the order they appear in the table):

  • unselect_others

  • unselect_to_left

  • select_to_left

  • unselect_to_right

  • select_to_right

Keypresses with Shift as a modifier ADD an adjacent View to the set of “selected” Views with the arrow direction determining which View. Un-shifted key presses REMOVE an adjacent View from the set of “selected” Views.

Key:
     A = Alt
     C = Ctrl
     S = Shift
  Ctxt = Context

Key

A

C

S

Ctxt

Command

Args

j

x

primary_j_changed

up

x

unselect_others

left

x

unselect_to_left

left

x

x

select_to_left

right

x

unselect_to_right

right

x

x

select_to_right

pageup

x

focus_to_left

pagedown

x

focus_to_right

9.1.8. Leading Key: Ctrl-K

In the commands in the below table, “pane” and “group” both mean View Group. In the order presented in the table:

  • new_pane (no args)

  • new_pane (“args”: {“move”: false})

  • close_pane

  • focus_neighboring_group (“args”: {“forward”: false})

  • move_to_neighboring_group (“args”: {“forward”: false})

  • focus_neighboring_group (no args)

  • move_to_neighboring_group (no args)

Key:
     A = Alt
     C = Ctrl
     S = Shift
  Ctxt = Context

Key

A

C

S

Ctxt

Command

Args

1

x

fold_by_level

{"level": 1}

2

x

fold_by_level

{"level": 2}

3

x

fold_by_level

{"level": 3}

4

x

fold_by_level

{"level": 4}

5

x

fold_by_level

{"level": 5}

6

x

fold_by_level

{"level": 6}

7

x

fold_by_level

{"level": 7}

8

x

fold_by_level

{"level": 8}

9

x

fold_by_level

{"level": 9}

0

x

unfold_all

a

x

select_to_mark

b

x

toggle_side_bar

c

x

show_at_center

d

x

find_under_expand_skip

g

x

clear_bookmarks

{"name": "mark"}

j

x

unfold_all

k

x

run_macro_file

{"file": "res://Packages/Default/Delete to Hard EOL.sublime-macro"}

l

x

lower_case

t

x

fold_tag_attributes

u

x

upper_case

v

x

paste_from_history

w

x

delete_to_mark

x

x

swap_with_mark

y

x

yank

z

x

revert_hunk

z

x

x

revert_modification

/

x

toggle_inline_diff

;

x

toggle_inline_diff

{"prefer_hide": true}

]

x

reindent

{"single_line": true}

up

x

new_pane

up

x

x

new_pane

{"move": false}

down

x

close_pane

left

x

focus_neighboring_group

{"forward": false}

left

x

x

move_to_neighboring_group

{"forward": false}

right

x

focus_neighboring_group

right

x

x

move_to_neighboring_group

backspace

x

run_macro_file

{"file": "res://Packages/Default/Delete to Hard BOL.sublime-macro"}

space

x

set_mark

Note

Regarding these commands, see The Kill Ring for more information.

  • delete_to_mark

  • yank

Regarding these commands, see Incremental Diff for more details.

  • revert_hunk

  • revert_modification

  • toggle_inline_diff