译者注:选自我翻译的 Helix Book,全文档 在此处。
标记为 LSP 的映射需要该文件类型的语言服务器。
标记为 TS 的映射需要该文件类型的 tree-sitter 语法支持。
注意:与 Vim 不同的是,
f
、F
、t
、T
并不局限于当前行。
按键 | 描述 | 命令 |
---|---|---|
h , Left |
左移 | move_char_left |
j , Down |
下移 | move_line_down |
k , Up |
上移 | move_line_up |
l , Right |
右移 | move_char_right |
w |
移动到下一个 word 开头 | move_next_word_start |
b |
移动到上一个 word 开头 | move_prev_word_start |
e |
移动到下一个 word 结尾 | move_next_word_end |
W |
移动到下一个 WORD 开头 | move_next_long_word_start |
B |
移动到上一个 WORD 结尾 | move_prev_long_word_start |
E |
移动到下一个 WORD 结尾 | move_next_long_word_end |
t |
找到下个字符之前 | find_till_char |
f |
找到下个字符 | find_next_char |
T |
找到上个字符之后 | till_prev_char |
F |
找到上个字符 | find_prev_char |
G |
nG 表示去第 n 行, n 为数字 |
goto_line |
Alt-. |
重复上次光标移动 (f 、t 、m 等) |
repeat_last_motion |
Home |
移动到当前行开头 | goto_line_start |
End |
移动到当前行结尾 | goto_line_end |
Ctrl-b , PageUp |
往上翻页 | page_up |
Ctrl-f , PageDown |
往下翻页 | page_down |
Ctrl-u |
往上翻半页 | half_page_up |
Ctrl-d |
往下翻半页 | half_page_down |
Ctrl-i |
移动到跳转列表上的下一项 | jump_forward |
Ctrl-o |
移动到跳转列表上的上一项 | jump_backward |
Ctrl-s |
保存当前选区到跳转列表 | save_selection |
按键 | 描述 | 命令 |
---|---|---|
r |
替换为一个字符 | replace |
R |
替换为复制的文本 | replace_with_yanked |
~ |
切换所选文本的大小写 | switch_case |
` |
将所选文本设置为小写 | switch_to_lowercase |
Alt-` |
将所选文本设置为大写 | switch_to_uppercase |
i |
在所选内容之前插入 | insert_mode |
a |
在所选内容之后插入(追加) | append_mode |
I |
在当前行开头插入 | insert_at_line_start |
A |
在当前行结尾插入 | insert_at_line_end |
o |
在所选内容下方开始新的一行 | open_below |
O |
在所选内容上方开始新的一行 | open_above |
. |
重复上次插入 | N/A |
u |
撤销修改 | undo |
U |
恢复修改 | redo |
Alt-u |
回到上一次历史 | earlier |
Alt-U |
回到下一次历史 | later |
y |
复制选择的内容 | yank |
p |
在所选内容后方粘贴 | paste_after |
P |
在所选内容前方粘贴 | paste_before |
"
|
选择一个寄存器把文本复制到那里或者从那粘贴 | select_register |
> |
缩进所选内容 | indent |
< |
取消缩进所选内容 | unindent |
= |
对所选内容格式化(目前无此功能/禁用) (LSP) | format_selections |
d |
删除所选内容 | delete_selection |
Alt-d |
删除所选内容,但不复制被删除的内容 | delete_selection_noyank |
c |
修改所选内容(删除并进入插入模式) | change_selection |
Alt-c |
修改所选内容(删除并进入插入模式),但不复制被删除的内容 | change_selection_noyank |
Ctrl-a |
对光标下的数字自增 | increment |
Ctrl-x |
对光标下的数字自减 | decrement |
Q |
开始/结束录制到所选寄存器的宏(实验功能) | record_macro |
q |
从所选寄存器回放录制的宏(实验功能) | replay_macro |
按键 | 描述 | 命令 |
---|---|---|
| |
把每个选定内容放入管道,并将 shell 命令的输出替换掉这些内容 | shell_pipe |
Alt-| |
把每个选定内容放入管道,并忽略掉 shell 命令的输出 | shell_pipe_to |
! |
运行 shell 命令,将其结果插入到每个选定内容之前 | shell_insert_output |
Alt-! |
运行 shell 命令,将其结果插入到每个选定内容之后 | shell_append_output |
$ |
将每个选区通过管道传输到 shell 命令中,保留命令返回为 0 的选区 | shell_keep_pipe |
按键 | 描述 | 命令 |
---|---|---|
s |
在选区范围内的选择所有正则表达式匹配的内容 | select_regex |
S |
在选区范围内的选择正则表达式匹配之外的内容 | split_selection |
Alt-s |
在多行选区中对每个非空行结尾放置一个光标 | split_selection_on_newline |
& |
按列对齐选区(先使用 Alt-s ) |
align_selections |
_ |
从选区中移除首尾空格来缩小选取 | trim_selections |
; |
把选区收缩到光标(多光标选区折叠到选区各自的光标上) | collapse_selection |
Alt-; |
反转选区光标和锚点(对应于 Vim 的 o ) |
flip_selections |
Alt-: |
确保选区往正文本方向(即把所有选区光标放置于选区结尾) | ensure_selections_forward |
, |
只保留主选区(多光标时收缩到主光标) | keep_primary_selection |
Alt-, |
移除主选区(多光标时移除主光标) | remove_primary_selection |
C |
对下一行复制选区(多光标时往下增加一个相同位置的光标) | copy_selection_on_next_line |
Alt-C |
对上一行复制选区(多光标时往上增加一个相同位置的光标) | copy_selection_on_prev_line |
( |
把上一个选区作为主选区(主选区后移) | rotate_selections_backward |
) |
把下一个选区作为主选区(主选区前移) | rotate_selections_forward |
Alt-( |
把每个选区内容换成其下一个选区的内容(选区内容后移) | rotate_selection_contents_backward |
Alt-) |
把每个选区内容换成其上一个选区的内容(选区内容前移) | rotate_selection_contents_forward |
% |
选择整个文件 | select_all |
x |
选择当前行;如果已选择,延伸到下一行 | extend_line_below |
X |
将选区扩展到行边界且 line-wise1 | extend_to_line_bounds |
Alt-x |
将选区扩展到行边界且 line-wise | shrink_to_line_bounds |
J |
在选取内用空格拼接行 | join_selections |
Alt-J |
在选取内拼接行,但连接处使用多光标 | join_selections_space |
K |
多选区内只保留匹配正则的选区 | keep_selections |
Alt-K |
多选区内移除匹配正则的选区 | remove_selections |
Ctrl-c |
注释/取消注释所选内容 | toggle_comments |
Alt-o , Alt-up |
将所选内容拓展到上一级父语法节点 (TS) | expand_selection |
Alt-i , Alt-down |
将所选内容收缩语法节点 (TS) | shrink_selection |
Alt-p , Alt-left |
选择语法树中的上一个同级节点 (TS) | select_prev_sibling |
Alt-n , Alt-right |
选择语法树中的下一个同级节点 (TS) | select_next_sibling |
╭─────╮ ╭─────╮ ╭─────╮
│text1│ <── backward ──│text0│── forward ──> │text1│
╰─────╯ ╰─────╯ ╰─────╯
╭─────╮
│text1│
╰─────╯
↑
backward:选区往上/往后/反向
|
╭─────╮
│text0│
╰─────╯
|
forward:选区往下/往前/正向
↓
╭─────╮
│text1│
╰─────╯
默认情况下,搜索命令都在 /
寄存器上操作。使用 "
来操作不同的寄存器。
按键 | 描述 | 命令 |
---|---|---|
/ |
文本正方向正则搜索 | search |
? |
文本反方向正则搜索 | rsearch |
n |
选择下一个匹配到的搜索内容(选区会增加) | search_next |
N |
选择下一个匹配到的搜索内容(选区会增加) | search_prev |
* |
使用当前选中的文本作为搜索模式 | search_selection |
这些子模式可从正常模式访问,通常在命令结束后切换回正常模式。
按键 | 描述 | 命令 |
---|---|---|
v |
进入 select (extend) mode | select_mode |
g |
进入 goto mode | N/A |
m |
进入 match mode | N/A |
: |
进入 command mode | command_mode |
z |
进入 view mode | N/A |
Z |
进入 sticky view mode | N/A |
Ctrl-w |
进入 window mode | N/A |
Space |
进入 space mode | N/A |
view 模式用于在不更改选区的情况下滚动和操作视图。
这种模式的 sticky (按 Z
)方式是持久的:需使用 Esc
键返回到正常模式。当你只是浏览文本而不是主动编辑它时,这一方式很有用。
Key | Description | Command |
---|---|---|
z , c |
垂直居中当前行 | align_view_center |
t |
将当前行与屏幕顶部对齐 | align_view_top |
b |
将当前行与屏幕底部对齐 | align_view_bottom |
m |
将当前行与屏幕中间水平对齐 | align_view_middle |
j , down |
向下滚动视图 | scroll_down |
k , up |
向上滚动视图 | scroll_up |
Ctrl-f , PageDown |
向下翻页 | page_down |
Ctrl-b , PageUp |
向上翻页 | page_up |
Ctrl-d |
向下翻半页 | half_page_down |
Ctrl-u |
向上翻半页 | half_page_up |
按 g
进入此模式,来跳跃到不同的位置。
按键 | 描述 | 命令 |
---|---|---|
g |
输入 gng 跳转到第 n 行2;不输入数字跳转到第 1 行 |
goto_file_start |
e |
到最后一行 | goto_last_line |
f |
到所选文件3 | goto_file |
h |
到当前行开头 | goto_line_start |
l |
到当前行结尾 | goto_line_end |
s |
到当前行第一个非空格字符 | goto_first_nonwhitespace |
t |
到屏幕顶部那行 | goto_window_top |
c |
到屏幕中间那行 | goto_window_center |
b |
到屏幕底部那行 | goto_window_bottom |
d |
跳转到定义 (LSP) | goto_definition |
y |
跳转到类型定义 (LSP) | goto_type_definition |
r |
跳转到引用 (LSP) | goto_reference |
i |
跳转到实现 (LSP) | goto_implementation |
a |
到上次访问的/备选文件 | goto_last_accessed_file |
m |
到上次修改的/备选文件 | goto_last_modified_file |
n |
到下个缓冲区 | goto_next_buffer |
p |
到上个缓冲区 | goto_previous_buffer |
. |
到当前文件中的最后一次修改处 | goto_last_modification |
在 normal 模式按 m
进入该模式。有关 环绕 和 文本对象 的解释,请参阅 使用 的相关部分。
按键 | 描述 | 命令 |
---|---|---|
m |
到匹配的括号 (TS) | match_brackets |
s
|
用将当前选定内容用 包围起来 |
surround_add |
r
|
把环绕的 字符替换成
|
surround_replace |
d
|
删除环绕的
|
surround_delete |
a
|
删除 textobject 文本 | select_textobject_around |
i
|
删除 textobject 内部的文本 | select_textobject_inner |
TODO:选择语法节点的映射([
的超集)。
这部分类似于 Vim 键绑定,因为 Kakoune 不支持窗口。按
或者
进入此模式。
按键 | 描述 | 命令 |
---|---|---|
w , Ctrl-w |
切换到下一个窗口 | rotate_view |
v , Ctrl-v |
垂直向右拆分 | vsplit |
s , Ctrl-s |
水平底部拆分 | hsplit |
f |
以水平拆分方式转到所选内容中的文件 | goto_file |
F |
以垂直拆分方式转到所选内容中的文件 | goto_file |
h , Ctrl-h , Left |
移动光标到左侧拆分窗口 | jump_view_left |
j , Ctrl-j , Down |
移动光标到下侧拆分窗口 | jump_view_down |
k , Ctrl-k , Up |
移动光标到上侧拆分窗口 | jump_view_up |
l , Ctrl-l , Right |
移动光标到右侧拆分窗口 | jump_view_right |
q , Ctrl-q |
关闭当前窗口 | wclose |
o , Ctrl-o |
仅保留当前窗口,关闭所有其他窗口 | wonly |
H |
交换当前窗口到左侧4 | swap_view_left |
J |
交换当前窗口到下侧 | swap_view_down |
K |
交换当前窗口到上侧 | swap_view_up |
L |
交换当前窗口到右侧 | swap_view_right |
该部分是一个杂乱无章的映射,主要是 picker。按
进入此模式。
按键 | 描述 | 命令 |
---|---|---|
f |
打开文件选取器 | file_picker |
F |
打开当前项目目录的文件选取器 | file_picker_in_current_directory |
b |
打开缓冲区选取器 | buffer_picker |
j |
打开跳转列表选取器 | jumplist_picker |
k |
在 popup 框中显示光标下条目的文档 (LSP) | hover |
s |
打开当前文档符号选取器 (LSP) | symbol_picker |
S |
打开工作区符号选取器 (LSP) | workspace_symbol_picker |
g |
打开当前文档代码诊断选取器 (LSP) | diagnostics_picker |
G |
打开工作区代码诊断选取器 (LSP) | workspace_diagnostics_picker |
r |
重命名符号 (LSP) | rename_symbol |
a |
执行代码操作 (LSP) | code_action |
' |
打开上次的模糊选取器 | last_picker |
w |
进入 window mode | N/A |
p |
在选区后方粘贴系统剪贴板的内容 | paste_clipboard_after |
P |
在选区前方粘贴系统剪贴板的内容 | paste_clipboard_before |
y |
复制所选文本到粘贴板 | yank_joined_to_clipboard |
Y |
(多选区时)复制主选区到粘贴板 | yank_main_selection_to_clipboard |
R |
将所选文本替换成系统粘贴板的文本 | replace_selections_with_clipboard |
/ |
在工作区文件夹下全局搜索文本 | global_search |
? |
打开命令选项板 | command_palette |
提示:全局搜索虽然使用命令行输入,但在模糊选取器中显示结果,所以你可以在打开文件后使用
将上次搜索的结果其带回。
'
显示光标下条目的文档。
按键 | 描述 |
---|---|
Ctrl-u |
向上滚动 |
Ctrl-d |
向下滚动 |
使用 vim-unimpaired 风格的映射来代码导航。
按键 | 描述 | 命令 |
---|---|---|
[d |
到上一个诊断 (LSP) | goto_prev_diag |
]d |
到下一个诊断 (LSP) | goto_next_diag |
[D |
到本文件的第一个诊断 (LSP) | goto_first_diag |
]D |
到本文件的最后一个诊断 (LSP) | goto_last_diag |
]f |
到下一个函数 (TS) | goto_next_function |
[f |
到上一个函数 (TS) | goto_prev_function |
]c |
到下一个类 (TS) | goto_next_class |
[c |
到上一个类 (TS) | goto_prev_class |
]a |
到下一个参数 (TS) | goto_next_parameter |
[a |
到上一个参数 (TS) | goto_prev_parameter |
]o |
到下一个注释 (TS) | goto_next_comment |
[o |
到上一个注释 (TS) | goto_prev_comment |
]t |
到下一个测试 (TS) | goto_next_test |
]t |
到上一个测试 (TS) | goto_prev_test |
]p |
到下一个段落 | goto_next_paragraph |
[p |
到上一个段落 | goto_prev_paragraph |
[Space |
在上面添加新的一行 | add_newline_above |
]Space |
在下面添加新的一行 | add_newline_below |
默认情况下,insert mode 绑定的按键在某种程度上是最少的。 Helix 被设计成一个模式编辑器,这反映在用户体验和内部机制上。
例如,只有在从 insert mode 退出到 normal mode 时,才会保存对文本所做的更改以供撤消。出于这个原因,强烈鼓励新用户学习模式编辑范例,以获得最流畅的体验。
按键 | 描述 | 命令 |
---|---|---|
Escape |
切换到正常模式 | normal_mode |
Ctrl-s |
提交撤消检查点 | commit_undo_checkpoint |
Ctrl-x |
自动补全 | completion |
Ctrl-r |
插入寄存器的内容 | insert_register |
Ctrl-w , Alt-Backspace |
删除上一个单词 | delete_word_backward |
Alt-d , Alt-Delete |
删除下一个单词 | delete_word_forward |
Ctrl-u |
删除到行首 | kill_to_line_start |
Ctrl-k |
删除到行尾 | kill_to_line_end |
Ctrl-h , Backspace |
删除上一个字符 | delete_char_backward |
Ctrl-d , Delete |
删除下一个字符 | delete_char_forward |
Ctrl-j , Enter |
插入新行 | insert_newline |
不推荐使用这些快捷键,只是为不太熟悉模式编辑器的新用户提供这些。
如果你希望在更习惯使用模式编辑时在 insert mode 下禁用它们,则在 config.toml
中使用以下命令:
[keys.insert]
up = "no_op"
down = "no_op"
left = "no_op"
right = "no_op"
pageup = "no_op"
pagedown = "no_op"
home = "no_op"
end = "no_op"
按 v
进入和退出此模式,此模式类似于 normal mode,但会更改任意移动以扩展选区,而不是替换这些选区。goto 移动也被更改为扩展,例如,vgl
将所选内容扩展到行尾。
搜索也受到了影响。默认情况下,n
和 N
会移除当前选区,并选择搜索词的下一个实例。
在按 n
或 N
之前切换此模式可以保持当前选区。在迭代式搜索时打开和关闭这个模式,可让你有选择地将搜索项添加到选区中。5
在选取器中使用的按键。当前不支持重新映射这些按键。
按键 | 描述 |
---|---|
Shift-Tab , Up , Ctrl-p |
前一条 |
Tab , Down , Ctrl-n |
后一条 |
PageUp , Ctrl-u |
往上翻页 |
PageDown , Ctrl-d |
往下翻页 |
Home |
到第一条 |
End |
到最后一条 |
Enter |
打开所选项 |
Ctrl-s |
垂直拆分窗口再打开 |
Ctrl-v |
水平拆分窗口再打开 |
Ctrl-t |
切换预览 |
Escape , Ctrl-c |
关闭选取器 |
在提示框(比如按 s
在命令行弹出待输入的那个位置)内使用的按键,当前不支持重新映射。
按键 | 描述 |
---|---|
Escape , Ctrl-c |
关闭提示框 |
Alt-b , Ctrl-Left |
到上一个 word (nomal mode 下的 b ) |
Ctrl-b , Left |
到上一个 char (nomal mode 下的 h ) |
Alt-f , Ctrl-Right |
到下一个 word |
Ctrl-f , Right |
到下一个 char |
Ctrl-e , End |
到行结尾 |
Ctrl-a , Home |
到行开头 |
Ctrl-w , Alt-Backspace , Ctrl-Backspace |
删除前一个 word |
Alt-d , Alt-Delete , Ctrl-Delete |
删除下一个 word |
Ctrl-u |
删除到行开头 |
Ctrl-k |
删除到行结尾 |
Backspace , Ctrl-h |
删除前一个 char |
Delete , Ctrl-d |
删除下一个 char |
Ctrl-s |
载光标下插入一个,可能以后会改成 Ctrl-r Ctrl-w |
Ctrl-p , Up |
选择上一个历史 |
Ctrl-n , Down |
选择下一个历史 |
Ctrl-r |
插入所选寄存器的内容 |
Tab |
选择下一个补全项 |
BackTab |
选择上一个补全项 |
Enter |
打开选定项 |
译者注:X
与 x
的区别在于,跨行拓展时,x
总是把光标放于末尾,而 X
会感知选区的方向,这被称为
line-wise:如果光标在选区往下的方向,那么选区拓展后的光标位于末尾;如果光标在选区往上的方向,那么选区拓展后的光标位于末尾。
关于选区的方向,你可以参考我的理解: ↩︎
gng
等价于 ngg
和 nG
,都用于跳转到第 n 行。 ↩︎
gf
会将所选内容视为文件路径(可以是相对路径也可以是绝对路径);当该路径不存在,打开那个路径的缓冲区,写入即创建该文件(不写入不创建)。 ↩︎
译者注:目前仅在左右拆分启用。下面几个也一样。 ↩︎
译者注:例如选择 abc
,按 *
将搜索 abc
,并进入 select mode,所以按 n
会把下个搜索结果添加进选区,按 v
退回
normal mode,所以按 n
不再把下个搜索结果添加进选区(但仍会保留已存在的选区)。 ↩︎