Helix 按键映射

译者注:选自我翻译的 Helix Book,全文档 在此处。

标记为 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
G nG 表示去第 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
" 选择一个寄存器把文本复制到那里或者从那粘贴 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-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

Minor modes

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

按键 描述 命令
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 mode

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

Goto mode

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

Match mode

在 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:选择语法节点的映射([ 的超集)。

Window mode

这部分类似于 Vim 键绑定,因为 Kakoune 不支持窗口。按 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 交换当前窗口到左侧4 swap_view_left
J 交换当前窗口到下侧 swap_view_down
K 交换当前窗口到上侧 swap_view_up
L 交换当前窗口到右侧 swap_view_right

Space mode

该部分是一个杂乱无章的映射,主要是 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

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

Popup

显示光标下条目的文档。

按键 描述
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

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 打开选定项

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

  2. gng 等价于 nggnG,都用于跳转到第 n 行。 ↩︎

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

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

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

你可能感兴趣的:(Helix,rust,helix,编辑器)