banner
huqingye

huqingye

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
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 命令的輸出替換掉這些內容
`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-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
╭─────╮                ╭─────╮               ╭─────╮
│text1│ &lt;── backward ──│text0│── forward ──&gt; │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) 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
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
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>' 將上次搜索的結果其帶回。

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 將所選內容擴展到行尾。

搜索也受到了影響。默認情況下,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 會將所選內容視為文件路徑(可以是相對路徑也可以是絕對路徑);當該路徑不存在,打開那個路徑的緩衝區,寫入即創建該文件(不寫入不創建)。 ↩︎

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。