譯者注:選自我翻譯的 Helix Book,全文檔 在此處。
標記為 LSP 的映射需要該文件類型的語言伺服器。
標記為 TS 的映射需要該文件類型的 tree-sitter 語法支持。
Normal mode#
光標移動#
注意:與 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 |
" <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 命令的輸出替換掉這些內容 |
`Alt- | ` | 把每個選定內容放入管道,並忽略掉 shell 命令的輸出 |
! | 運行 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│
╰─────╯
<div class="hljs-button {2}" data-title="複製"></div>
搜索文本#
默認情況下,搜索命令都在 /
寄存器上操作。使用 "<char>
來操作不同的寄存器。
按鍵 | 描述 | 命令 |
---|---|---|
/ | 文本正方向正則搜索 | 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 <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 | 交換當前窗口到左側4 | swap_view_left |
J | 交換當前窗口到下側 | swap_view_down |
K | 交換當前窗口到上側 | swap_view_up |
L | 交換當前窗口到右側 | swap_view_right |
Space mode#
該部分是一個雜亂無章的映射,主要是 picker。按 <space>
進入此模式。
按鍵 | 描述 | 命令 |
---|---|---|
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 |
提示:全局搜索雖然使用命令行輸入,但在模糊選取器中顯示結果,所以你可以在打開文件後使用
<space>'
將上次搜索的結果其帶回。
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"
<div class="hljs-button {2}" data-title="複製"></div>
Select / extend mode#
按 v
進入和退出此模式,此模式類似於 normal mode,但會更改任意移動以擴展選區,而不是替換這些選區。goto 移動也被更改為擴展,例如,vgl
將所選內容擴展到行尾。
搜索也受到了影響。默認情況下,n
和 N
會移除當前選區,並選擇搜索詞的下個實例。
在按 n
或 N
之前切換此模式可以保持當前選區。在迭代式搜索時打開和關閉這個模式,可讓你有選擇地將搜索項添加到選區中。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 | 打開選定項 |