按键映射

标记为 LSP 的映射需要该文件类型的语言服务器。

标记为 TS 的映射需要该文件类型的 tree-sitter 语法支持。

Normal mode

光标移动

注意:与 Vim 不同的是,fFtT 并不局限于当前行。

按键描述命令
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
GnG 表示去第 n 行, n 为数字goto_line
Alt-.重复上次光标移动 (ftm 等)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
" <reg>选择一个寄存器把文本复制到那里或者从那粘贴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 命令的输出替换掉这些内容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-salign_selections
_从选区中移除首尾空格来缩小选取trim_selections
;把选区收缩到光标(多光标选区折叠到选区各自的光标上)collapse_selection
Alt-;反转选区光标和锚点(对应于 Vim 的 oflip_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-wise1extend_to_line_bounds
Alt-x将选区扩展到行边界且 line-wiseshrink_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
1

译者注:Xx 的区别在于,跨行拓展时,x 总是把光标放于末尾,而 X 会感知选区的方向,这被称为 line-wise:如果光标在选区往下的方向,那么选区拓展后的光标位于末尾;如果光标在选区往上的方向,那么选区拓展后的光标位于末尾。 关于选区的方向,你可以参考我的理解:

╭─────╮                ╭─────╮               ╭─────╮
│text1│ <── backward ──│text0│── forward ──> │text1│
╰─────╯                ╰─────╯               ╰─────╯

╭─────╮
│text1│
╰─────╯
   ↑
backward:选区往上/往后/反向
   |
╭─────╮
│text0│
╰─────╯
   |
forward:选区往下/往前/正向
   ↓
╭─────╮
│text1│
╰─────╯

搜索文本

默认情况下,搜索命令都在 / 寄存器上操作。使用 "<char> 来操作不同的寄存器。

按键描述命令
/文本正方向正则搜索search
?文本反方向正则搜索rsearch
n选择下一个匹配到的搜索内容(选区会增加)search_next
N选择下一个匹配到的搜索内容(选区会增加)search_prev
*使用当前选中的文本作为搜索模式search_selection

Minor modes

这些子模式可从正常模式访问,通常在命令结束后切换回正常模式。

按键描述命令
v进入 select (extend) modeselect_mode
g进入 goto modeN/A
m进入 match modeN/A
:进入 command modecommand_mode
z进入 view modeN/A
Z进入 sticky view modeN/A
Ctrl-w进入 window modeN/A
Space进入 space modeN/A

View mode

view 模式用于在不更改选区的情况下滚动和操作视图。

这种模式的 sticky (按 Z)方式是持久的:需使用 Esc 键返回到正常模式。当你只是浏览文本而不是主动编辑它时,这一方式很有用。

KeyDescriptionCommand
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

Goto mode

g 进入此模式,来跳跃到不同的位置。

按键描述命令
g输入 gng 跳转到第 n 行2;不输入数字跳转到第 1 行goto_file_start
e到最后一行goto_last_line
f到所选文件3goto_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
2

gng 等价于 nggnG,都用于跳转到第 n 行。

3

gf 会将所选内容视为文件路径(可以是相对路径也可以是绝对路径);当该路径不存在,打开那个路径的缓冲区,写入即创建该文件(不写入不创建)。

Match mode

在 normal 模式按 m 进入该模式。有关 环绕文本对象 的解释,请参阅 使用 的相关部分。

按键描述命令
m到匹配的括号 (TS)match_brackets
s <char>用将当前选定内容用 <char> 包围起来surround_add
r <from><to>把环绕的 <from> 字符替换成 <to>surround_replace
d <char>删除环绕的 <char>surround_delete
a <object>删除 textobject 文本select_textobject_around
i <object>删除 textobject 内部的文本select_textobject_inner

TODO:选择语法节点的映射([ 的超集)。

Window mode

这部分类似于 Vim 键绑定,因为 Kakoune 不支持窗口。按 <space>w 或者 <Ctrl-w> 进入此模式。

按键描述命令
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交换当前窗口到左侧4swap_view_left
J交换当前窗口到下侧swap_view_down
K交换当前窗口到上侧swap_view_up
L交换当前窗口到右侧swap_view_right
4

译者注:目前仅在左右拆分启用。下面几个也一样。

Space mode

该部分是一个杂乱无章的映射,主要是 picker。按 <space> 进入此模式。

按键描述命令
f打开文件选取器file_picker
F打开当前项目目录的文件选取器file_picker_in_current_directory
b打开缓冲区选取器buffer_picker
j打开跳转列表选取器jumplist_picker
kpopup 框中显示光标下条目的文档 (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 modeN/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

提示:全局搜索虽然使用命令行输入,但在模糊选取器中显示结果,所以你可以在打开文件后使用 <space>' 将上次搜索的结果其带回。

显示光标下条目的文档。

按键描述
Ctrl-u向上滚动
Ctrl-d向下滚动

Unimpaired

使用 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

默认情况下,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"

Select / extend mode

v 进入和退出此模式,此模式类似于 normal mode,但会更改任意移动以扩展选区,而不是替换这些选区。goto 移动也被更改为扩展,例如,vgl 将所选内容扩展到行尾。

搜索也受到了影响。默认情况下,nN 会移除当前选区,并选择搜索词的下一个实例。

在按 nN 之前切换此模式可以保持当前选区。在迭代式搜索时打开和关闭这个模式,可让你有选择地将搜索项添加到选区中。5

5

译者注:例如选择 abc,按 * 将搜索 abc,并进入 select mode,所以按 n 会把下个搜索结果添加进选区,按 v 退回 normal mode,所以按 n 不再把下个搜索结果添加进选区(但仍会保留已存在的选区)。

Picker

在选取器中使用的按键。当前不支持重新映射这些按键。

按键描述
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关闭选取器

Prompt

在提示框(比如按 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打开选定项
6

译者注:会弹出寄存器及其内容,输入寄存器的名称即插入其内容。即按 Ctrl-r"" 寄存器的内容插入到光标下。