Helix简介

Helix编辑器是类似 Vim操作模式的终端文本编辑器。其具有类似Vim一样的简洁和高效的编辑方式,而且针对命令模式的交互进行了优化,参考了NeoVim和kakoune两款编辑器,注重文本选择与模块集成,能够实现开箱即用。

我之所以会关注到Helix,主要原因是Vim或者Neovim的编辑环境配置非常依赖github的各种仓库,而国内糟糕的网络环境给配置和升级编辑环境带来很多烦恼。在多次搜寻过程中,发现helix是可以满足开箱即用,且有优秀的命令模式交互界面,极大改善用户的使用体验。

Helix编辑器最明显的一个问题就是没有插件系统,这对于那些喜欢自己定制编辑器环境的朋友来说,不是那么友好,可玩性不高。官方确实有考虑做一个插件系统,但是优先要做的是Helix默认集成的特性已经足够好了,选择插件扩展目前优先级不是那么高。参见讨论

而那些愿意使用Helix的用户,肯定是希望不折腾的用户,默认内置的优秀功能应对一些开发环境已经足够。而且Helix运行的足够快,喜欢用终端来处理文档的用户基本不会在编辑速度上遇到问题。

本篇主要基于Helix的官方文档,介绍Helix编辑器的基本理念和使用方法,文章内容不会根据官方文档持续更新,希望关注Helix的用户可以跟踪官方网站与Github仓库

! Helix是Rust编写,属于后现代风格编辑器 ^_^

相关链接

Helix 官方网站

Helix 官方文档

Helix Github

Helix 安装

Linux平台

Linux平台上基本需要依赖每个发行版的维护,目前Helix已经支持主流的各大Linux发行版

Ubuntu

配置Helix的ppa

sudo add-apt-repository ppa:maveonair/helix-editor
sudo apt update
sudo apt install helix

Fedora/RHEL

使用dnf直接安装

sudo dnf install helix

Arch Linux extra

使用pacman 直接安装

sudo pacman -S helix

NixOS

Helix已经在nixpkgs中,非稳定频道通常能获得最新发布版本

Helix也可以在flake中获得,使用nix develop 登录开发者终端。每个提到Master的push会用Cachix缓存。 flake配置为自动使用缓存,假设用户接受最新的第一个设置。

如果你不使用flakes,可以用 cachix 来安装配置Helix cachix use helix

Flatpak

Helix 可以在 Flathub获取:

flatpak install flathub com.helix_editor.Helix
flatpak run com.helix_editor.Helix

Snap

Helix 可以在 Snapcraft 获取:

snap install --classic helix

Helix会安装到 /snap/bin/helix/snap/bin/hx, 请确保 /snap/bin 在你的PATH中.

AppImage

Helix 可以在Linux中安装 AppImage 的镜像.

下载 Helix AppImage latest releases .

chmod +x helix-*.AppImage # change permission for executable mode
./helix-*.AppImage # run helix

macOS系统

Homebrew Core

brew install helix

MacPorts

port install helix

Windows

由于目前没有GUI工具,Helix在Windows上安装需要用到终端工具, Winget, Scoop, ChocolateyMSYS2.

Winget

Windows包管理器winget是 Windows 11 和 Windows 10 的应用安装程序。可以在 微软应用商店获得。

winget install Helix.Helix

Scoop

scoop install helix

Chocolatey

choco install helix

MSYS2

Windows 8.1 64位以上的版本:

pacman -S mingw-w64-ucrt-x86_64-helix

源码编译安装

准备工作:

从HelixGithub仓库克隆代码,本文中假设用户克隆到Linux/MacOs的~/src/或者Windows的%userprofile%\src\

主要依赖的工具:

  • Rust工具链
  • Git
  • 一个兼容C++14标准的C++编译器,例如Gcc或者Clang,用以构建tree-sitter

如果你使用musl-libc标准库,务必确保tree-sitter在编译时正确加载。

配置RUST编译参数:

RUSTFLAGS="-C target-feature=-crt-static"
  1. 克隆代码:

    git clone https://github.com/helix-editor/helix
    cd helix
  2. 编译构建:

    cargo install --path helix-term --locked

    上述命令执行完成后会得到hx可执行文件和在本地runtime目录中的tree-sitter的语法文件

Tree-sitter 语法库可以在线获取和编译,利用hx --grammar fetch可以获得语法库,利用hx --grammar build可以编译这些语法库

它们会被部署到用户的runtime目录,runtime目录的配置可参见下文

配置 Helix的runtime文件

Linux 和 macOS

runtime目录位于Helix源码目录中,可以设置环境变量HELIX_RUNTIME指向该路径。你可以设置这个环境变量到~/.bashrc等配置中:

HELIX_RUNTIME=~/src/helix/runtime

或者也可以创建软链接

ln -Ts $PWD/runtime ~/.config/helix/runtime

Windows平台

  1. 可以利用Windows工具设置HELIX_RUNTIME环境变量
  2. 可以在命令提示符中使用setx
setx HELIX_RUNTIME "%userprofile%\helix的runtime路径"

%userprofile%是你的用户目录地址类似与C:\Users\用户名\

%appdata%\helix\创建指向源码中runtime目录的链接:

方法 命令
PowerShell New-Item -ItemType Junction -Target "runtime" -Path "$Env:AppData\helix\runtime"
Cmd cd %appdata%\helix
mklink /D runtime "%userprofile%\src\helix\runtime"

在Windows中,创建一个符号链接需要获得Adminstrator权限来运行PowerShell或者Cmd

多重runtime目录

当Helix发现有多重runtime目录,会按照以下顺序来检索

  1. $CARGO_MANIFEST_DIR 目录下的runtime (这个为了开发调试Helix)
  2. 操作系统中用户配置目录下的runtime/
  3. $HELIX_RUNTIME
  4. 在编译时期设置的HELIX_DEFAULT_RUNTIME环境变量,其中配置了发行版指定路径
  5. Helix可执行文件路径下的runtime/

顺序优先级的设定会在多个路径下发现重复名称目录的情况下生效。

安装后的验证

Helix提供了一个健康检查工具,可以在安装后对状态进行检查:

hx --health

Helix 使用

Helix 内置了交互式的教程,可以通过命令hx --tutor或者:totur打开教程。文章后续会基于tutor进行总结介绍

熟练使用vim的用户,可以参考:从Vim迁移到Kakoune

Helix 基本操作

Helix与Vim编辑器类似,具有多种编辑模式。但Helix能够提供命令提示界面,有助于用户便捷使用。对于一些常见操作,Helix还可以进行命令检索,极大的方便了使用者。

下面展开介绍Helix的集中模式

普通模式

普通模式是进入Helix后默认模式,这种模式下的按键输入都是指令。你可以通过 Escape 从其他模式进入普通模式。

下面介绍普通模式下的指令:

移动

注意:与Vim不同,f, F, tT 并不受限于当前行。

按键 描述 命令
h, Left 向左移动(left:左按键) move_char_left
j, Down 向下移动(Down:下按键) move_visual_line_down
k, Up 向上移动(Up:上按键) move_visual_line_up
l, Right 向右移动(Right:右按键) move_char_right
w 移动到下一个字的开始 move_next_word_start
b 移动到上一个字的开始 move_prev_word_start
e 移动到下一个字的结尾 move_next_word_end
W 移动到下一个词的开始 move_next_long_word_start
B 移动到上一个词的开始 move_prev_long_word_start
E 移动到下一个词的结束 move_next_long_word_end
t 当前位置开始向后直到搜索到字符前 find_till_char
f 当前位置开始向后直到搜索到字符 find_next_char
T 当前位置开始向前直到搜索到字符前 till_prev_char
F 当前位置开始向前直到搜索到字符 find_prev_char
G 跳转到第n行(nG) goto_line
Alt-. 重复上一条指令(f, t or 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 跳转到jumplist前一项 jump_forward
Ctrl-o 跳转到jumplist后一项 jump_backward
Ctrl-s 保存当前位置到jumplist 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-minus 合并所选区域(当进入分割选择时,使用此操作回到单度选择) merge_selections
Alt-_ 合并连续的选择 merge_consecutive_selections
& 选择区域内列对齐 align_selections
_ 选择区域内去除空格 trim_selections
; 取消当前区域选择回到一个光标上继续开始选择 collapse_selection
Alt-; 所选区域的光标前后转换 flip_selections
Alt-: 确保选择区域是前进方向 ensure_selections_forward
, 多个光标选择状态时,只保留主光标 keep_primary_selection
Alt-, 移除一个选择区域Remove the primary selection 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 扩展选择到本行边界(行范围选择) extend_to_line_bounds
Alt-x 缩小选择区域到行边界(行范围选择)Shrink selection to line bounds (line-wise selection) 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 根据语法节点扩展所选区域 expand_selection
Alt-i, Alt-down 根据语法节点缩小所选区域 shrink_selection
Alt-p, Alt-left 根据语法节点选择前一个语法区域 select_prev_sibling
Alt-n, Alt-right 根据语法节点选择前一个语法区域 select_next_sibling

搜索

搜索命令都会默认操作寄存器/. 可以使用"<char>选择其他寄存器。

按键 描述 命令
/ 向后搜索一个正则表达式 search
? 向前搜索一个正则表达式 rsearch
n 选择下一个匹配 search_next
N 选择上一个匹配 search_prev
* 使用当前的选择作为搜索表达式 search_selection

轻模式

在普通模式下有一些子模式,可以在普通模式下使用按键进入子模式。

按键 描述 命令
v 进入选择模式 select_mode
g 进入跳转模式 N/A
m 进入匹配模式 N/A
: 进入命令模式 command_mode
z 进入视图模式 N/A
Z 进入并保持视图模式 N/A
Ctrl-w 进入窗口模式 N/A
Space 进入空格模式 N/A

这些模式(除了命令模式)可以在这里配置:快捷键重映射.

视图模式

普通模式下通过按键z进入。

视图模式可以在不改变选择的情况下操作当前视图上下翻页。通过Z可以一直保持在视图模式中,通过Escape键退出。

当你只是想翻看前后文本时比较有用。

按键 描述 命令
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 默认跳转到第一行,或者是第n行:<n>gg goto_file_start
e 跳转到最后一行 goto_last_line
f 跳转所选择的文件 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
j 向下移动文本行(而不是可视行) move_line_down
k 向上移动文本行(而不是可视行) move_line_up
匹配模式

普通模式下通过按键m 进入。

参考[Helix特色操作]中的环绕功能文本对象章节。

按键 描述 命令
m 跳转到配对的符号 match_brackets
s <char> 用一个字符来环绕所选文本 surround_add
r <from><to> <to>字符替换<from>字符 surround_replace
d <char> 删除环绕字符 surround_delete
a <object> 选择当前区域的环绕内容,包括环绕字符 select_textobject_around
i <object> 选择当前区域的环绕内容,不包括环绕字符 select_textobject_inner
窗口模式

普通模式下通过按键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 交换窗口到左边 swap_view_left
J 交换窗口到下边 swap_view_down
K 交换窗口到上边 swap_view_up
L 交换窗口到右边 swap_view_right
空格模式

普通模式下通过按键Space 进入。

整个模式是一堆映射,大部分是选择器。

按键 描述 命令
f 打开一个文件选择器 file_picker
F 在当前目录下打开文件选择器 file_picker_in_current_directory
b 打开缓冲选择器 buffer_picker
j 打开跳转列表选择器 jumplist_picker
g 调试模式(实验阶段) N/A
k 在当前位置利用弹窗显示语法文档 hover
s 打开文档符号选择器(LSP) symbol_picker
S 打开工程符号选择器(LSP) workspace_symbol_picker
d 打开文档诊断信息选择器(LSP) diagnostics_picker
D 打开工程诊断信息选择器(LSP) workspace_diagnostics_picker
r 重命名符号(LSP) rename_symbol
a 应用代码行为(LSP) code_action
h 选择符号引用(LSP) select_references_to_symbol_under_cursor
' 打开一个混合选择器 last_picker
w 进入窗口模式 N/A
p 粘贴粘贴板内容到当前位置到后面 paste_clipboard_after
P 粘贴粘贴板内容到当前位置到前面 paste_clipboard_before
y 将拉取内容复制到粘贴板 yank_to_clipboard
Y 将拉取的主内容复制到粘贴板,在多选时只选择一个 yank_main_selection_to_clipboard
R 用粘贴板到内容替代所选区域 replace_selections_with_clipboard
/ 在工程目录下全局搜索 global_search
? 打开一个命令面板 command_palette

全局搜索在一个混合选择器中显示结果,使用 Space + '可以跳转回搜索结果。

弹窗

在当前光标下显示文档

按键 描述
Ctrl-u 向上翻页
Ctrl-d 向下翻页

插入模式

普通模式下通过按键i 进入。

插入模式的绑定默认是最少的。Helix是一种模式化编辑器,模式化体现在Helix的用户体验和内在机制中。

文本的修改记录只有在编辑模式进入到普通模式时,才会保存到undo的检查点中。

极力推荐新用户学习模式操作,这会带来丝滑的体验

按键 描述 命令
Escape 切换到普通模式 normal_mode
Ctrl-s 提交到undo检查点 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, Shift-Backspace 向后删除一个字符 delete_char_backward
Ctrl-d, Delete 向前删除一个字符 delete_char_forward
Ctrl-j, Enter 插入一个新行 insert_newline

These keys are not recommended, but are included for new users less familiar

with modal editors.

以下快捷键不推荐使用,作为新手熟悉模式化编辑器的过度

按键 描述 命令
Up 移动到上一行 move_line_up
Down 移动到下一行 move_line_down
Left 向左边移动 move_char_left
Right 向右边移动 move_char_right
PageUp 向上翻页 page_up
PageDown 向下翻页 page_down
Home 移动到本行开始 goto_line_start
End 移动到本行结束 goto_line_end_newline

如果你希望更加适应模式编辑,你可以在配置文件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 进入。

选择模式是普通模式的另一种表现形式,不过大部分操作是去选择,而不是替代。

跳转模式在选择模式下也是一种区域扩展。例如vgl,是扩展到本行末尾

搜索也被选择模式所影响。默认的, n and N 会跳转到下一个或上一个搜索项

,搜索过程中进入选择模式,在跳转时这些搜索项就会保持选择状态,后续就可以批量操作。

选择器

以下按键是选择器快捷键,暂时不支持修改

按键 描述
Shift-Tab, Up, Ctrl-p 前一个选项
Tab, Down, Ctrl-n 下一个选项
PageUp, Ctrl-u 向上翻页
PageDown, Ctrl-d 向下翻页
Home 跳到第一个选项
End 跳到最后一个选项
Enter 打开所选择的
Alt-Enter 在后台打开所选择的,不关闭当前选择器
Ctrl-s 水平分割打开
Ctrl-v 垂直分割打开
Ctrl-t 切换预览
Escape, Ctrl-c 关闭选择器

提示

以下案件是提示快捷键,暂时不支持修改

按键 描述
Escape, Ctrl-c 关闭提示
Alt-b, Ctrl-Left 向后移动一个词
Ctrl-b, Left 向后移动一个字符
Alt-f, Ctrl-Right 向前移动一个字
Ctrl-f, Right 向前移动一个字符
Ctrl-e, End 移动到提示最后
Ctrl-a, Home 移动到提示最前
Ctrl-w, Alt-Backspace, Ctrl-Backspace 删除前面一个词
Alt-d, Alt-Delete, Ctrl-Delete 删除后一个词
Ctrl-u 删除到行开头
Ctrl-k 删除到行结尾
Backspace, Ctrl-h, Shift-Backspace 删除前一个字符
Delete, Ctrl-d 删除后一个字符
Ctrl-s 在文档光标处插入,后续可能修改
Ctrl-p, Up 选择前一个历史记录
Ctrl-n, Down 选择后一个历史记录
Ctrl-r 在插入处插入一个寄存器的内容
Tab 选择下一个提示项
BackTab 选择上一个提示项
Enter 打开选择项

Helix特色操作

Helix区别Vim的一个使用的特点是先选择后操作,例如可以通过w选择一个单词,然后再用d删除这个单词。对于Vim的操作,可能就需要dw来实现。

Helix内置了几个比较实用的功能,这些功能在Vim中需要安装插件实现。

环绕功能

这个功能类似与vim-surround,快捷键参考了vim-sandwich。

按键序列 (在选择文本之后使用) 行为
ms<char> 对于所选择的文本添加环绕字符
mr<char_to_replace><new_char> 替换最内层的环绕字符
md<char_to_delete> 删除最内层的环绕字符

你可以用计数来选择外层符号对。例如:[[[abc]]],可以将光标移动到abc中任一个字符上,按下2mr[(,实现将第二层的[]替换为():[([abc])]

环绕操作可以用在多重选择,例如想要将每个(use)替换成[use],可以如下操作:

  1. % 来选择整个文件
  2. s 来用检索词分割选择的区域
  3. 输入use 后按下回车
  4. mr([ 利用环绕操作替换

多重符号目前还没有支持,未来有计划实现。

使用文本对象进行文本选择和操作

Helix可以使用文本对象进行选择和操作结构化的文本片段。你可以用这个功能对特定文本结构进行操作,例如一个单词,句子,段落,甚至一个函数或一块代码。

可以增加git图像

  • ma 选择整个块
  • mi 选择块的内部

当执行mami后,可以选择下面操作进行多种文本对象的选择

操作 含义
w 字(按照单个字进行跳转)
W 词(按照用空格分割的词进行跳转,eg.tree-sitter)
p 段落(按照空行来分割的文本段)
(, [, ', etc. 字符(指定的环绕字符)
m 最内层的字符(也可用数字来指定最内的n层,参考上文例子)
f 函数
t 类型定义或类定义
a 参数或变量
c 注释
T 测试

f,t等需要基于tree-sitter语法分析当前文件才能正常工作。目前已经支持的语言参见支持语言

欢迎社区积极贡献

在tree-sitter的文本对象之间跳转

想要在不同的函数,类,参数以及其他元素之间跳转,需要依赖tree-sitter的文本对象。可以使用]f跳转到下一个函数块,使用[t跳转到下一个类型,等等。

Unimpaired

所有的跳转类型汇总,参考vim-unimpaired

按键 描述 命令
]d 下一个报错位置 (LSP) goto_next_diag
[d 上一个报错位置 (LSP) goto_prev_diag
]D 最后一个报错位置(LSP) goto_last_diag
[D 第一个报错位置 (LSP) goto_first_diag
]f 下一个函数(TS) goto_next_function
[f 前一个函数 (TS) goto_prev_function
]t 下一个类型定义(TS) goto_next_class
[t 前一个类型定义 (TS) goto_prev_class
]a 下一个参数/变量(TS) goto_next_parameter
[a 前一个参数/变量(TS) goto_prev_parameter
]c 下一个注释(TS) goto_next_comment
[c 前一个注释(TS) goto_prev_comment
]T 下一个测试(TS) goto_next_test
[T 前一个测试 (TS) goto_prev_test
]p 下一个段落 goto_next_paragraph
[p 前一个段落 goto_prev_paragraph
]g 下一个变更 goto_next_change
[g 前一个变更 goto_prev_change
]G 最后一个变更 goto_last_change
[G 第一个变更 goto_first_change
]Space 在下面增加一行 add_newline_below
[Space 在上面增加一行 add_newline_above

语法感知动作的移动

以下操作可根据语法感知选择的移动,利用解析后的语法树进行选择。

按键 操作含义
Alt-o/Alt-↑ 扩展语法区域
Alt-i/Alt-↓ 缩小语法区域
Alt-n/Alt-→ 选择下一个语法区域
Alt-p/Alt-← 选择前一个语法区域

通过:tree-sitter-subtree命令,可以显示解析后的语法树

func(arg1, arg2, arg3) 会解析为类似:

(call
function: (identifier) ; func
arguments:
(arguments ; (arg1, arg2, arg3)
(identifier) ; arg1
(identifier) ; arg2
(identifier))) ; arg3

如果当前选择了arg1:

  1. 当你使用Alt-n时,会选择到arg2;
  2. 当你使用Alt-o时,选择区域会扩张到func的所有参数:func([arg1,arg2,arg3])

以此类推其他操作。

寄存器

用户定义的寄存器

寄存器是存储空间,用来存放文本或者其他数据(例如搜索结果)。寄存器可以用来剪切,复制,粘贴文本,或者通过粘贴板与其他编辑器交流。

Helix允许用户自己定义寄存器的名字,如:

  • "ay 复制当前选择到寄存器a中
  • "op粘贴寄存器o中的内容至当前位置后方

如果寄存器选择时后跟上修改或者删除的指令,所选区域会被存储到寄存器中,并继续执行输入的指令,如:

  • "hc 存储到寄存器h中,并在所选区域开始编辑
  • "md 存储到寄存器m中,并删除所选区域

默认寄存器

helix内置的命令会使用寄存器,例如复制(y),使用默认寄存器不需要指定。

寄存器符号 内容
/ 最后一次的搜索
: 最后执行的命令
" 最后复制的文本
@ 最后使用的宏

特殊寄存器

一些寄存器有一些特殊行为

寄存器符号 当读操作时 当写操作时
_ 没有值可返回 所有值都要丢弃
# 选择的项(第一个选择是1,第二个是2,等等) 这个寄存器不可写
. 当前选择的内容 这个寄存器不可读
% 当前文件名称 这个寄存器不可读
+ 从当前系统粘贴板读取 将内容复制到系统粘贴板
* 从primary 粘贴板获得(鼠标中键) 将内容复制到primary 粘贴板(鼠标中键)

当多重选择复制到粘贴板寄存器中时,换行会一起复制进去。粘贴寄存器会得到最后一次获得的多重选择。此外粘贴板的内容只是单一选择的内容。

参考链接

Health check

Helix 安装文档

Helix的配置

https://www.cnblogs.com/tmacy/p/17934387.html

【推荐】后现代风格文本编辑器-Helix的更多相关文章

  1. 文本编辑器激活系列(一):Sublime 安装、激活、汉化教程

    如您激活出现问题,请点击这里加入:软件激活问题解决群 前言 推荐几款文本编辑器: Sublime:内嵌python解释器.大量插件 EditPlus:语法着色.内嵌浏览器 Notepad++:所见即所 ...

  2. 文本编辑器激活系列(二):UltraEdit安装、激活、汉化教程

    如您激活出现问题,请点击这里加入:软件激活问题解决群 前言 推荐几款文本编辑器: Sublime:内嵌python解释器.大量插件 EditPlus:语法着色.内嵌浏览器 Notepad++:所见即所 ...

  3. Python必学:使用哪款文本编辑器更好?

    Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍. 所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样,程 ...

  4. Python---2文本编辑器

    1.介绍 在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍. 所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文 ...

  5. 推荐两款富文本编辑器:NicEdit和Kindeditor

    做过Web开发的朋友相信都使用过富文本编辑器,比较出名的CuteEditor和CKEditor很多人应该已经使用过,在功能强大的同时需要加载的东西也变得很多.下面要推荐的两款富文本编辑器都是使用JS编 ...

  6. 【开发工具】- 推荐一款好用的文本编辑器[Sublime Text]

    作为一个程序员除了IDE外,文本编辑器也是必不可少的一个开发工具.之前一直在用的是NotePad++.EditPlus,这两款编辑器,但是总感觉差点什么,昨天在知乎上看到有人推荐Sublime Tex ...

  7. Summernote – 基于 Bootstrap 的文本编辑器

    Summernote 是一个简单,灵活,所见即所得(WYSIWYG)的编辑器,基于 jQuery 和 Bootstrap 构建.Summernote 所有主要的操作都支持快捷键,有一个功能强大的 AP ...

  8. Html富文本编辑器

    本文推荐两款简单的富文本编辑器[KindEditor,NicEdit]用于获得所见即所得的编辑效果,本文仅供学习分享使用,如有不足之处,还请指正. 概述 这两款编辑器都是采用JavaScript编写, ...

  9. Django-- KindEditor 富文本编辑器使用

    KindEditor是一款还不错的开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE.Firefox.Chrome.Safari.Opera等主流浏览器.之所以推荐这一 ...

  10. [No0000139]轻量级文本编辑器,Notepad最佳替代品:Notepad++

    在详细介绍Notepad++之前,先来解释一下,为何要选择Notepad++,即把常见的一些文本编辑器和Notepad++比较,看看其有哪点好: 常见的文本编辑器有很多,此处,只提及Notepad,N ...

随机推荐

  1. RabbitMQ——RabbitMQ面试题

    文章目录 为什么使用MQ?MQ的优点 消息队列有什么优缺点?RabbitMQ有什么优缺点? 你们公司生产环境用的是什么消息中间件? Kafka.ActiveMQ.RabbitMQ.RocketMQ 有 ...

  2. RK3588平台产测之ArmSoM产品高温环境测试

    1. 简介专栏总目录 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试,以此来保证产品的质量以及稳定性 优秀的产品都要进行严苛的多次全方位的功能测试以及性能压力测试才能够 ...

  3. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-19-处理鼠标拖拽-中篇

    1.简介 上一篇中,主要是介绍了拖拽的各种方法的理论知识以及实践,今天宏哥讲解和分享一下划取字段操作.例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能. 2.划取字段操作 划取字段操 ...

  4. 再学Blazor——组件

    Blazor 应用基于组件,组件可以复用和嵌套.本文内容如下: 组件类 组件嵌套 组件参数 组件对象 1. 组件类 所有组件都是继承 ComponentBase 组件基类,razor 文件默认继承 C ...

  5. 代码的艺术-Writing Code Like a Pianist

    前言 如何评定一个系统的质量?什么样的系统或者软件可以称之为高质量?可以从三个角度来看,一是架构设计,例如技术选型.分布式系统中的数据一致性考虑等,二是项目管理,无论是敏捷开发还是瀑布式开发,都应当对 ...

  6. APIO 2023 游记

    真心话大冒险很有趣. rand 一个房间去敲门加 QQ 很有趣.这么看社恐猫好像也没那么社恐. 面到了 zpl pcq iee dx.单方面认识了很多神仙. 比赛只会写暴力,评测 queue 害人不浅 ...

  7. 如何避免JavaScript中的内存泄漏?

    前言 过去,我们浏览静态网站时无须过多关注内存管理,因为加载新页面时,之前的页面信息会从内存中删除. 然而,随着单页Web应用(SPA)的兴起,应用程序消耗的内存越来越多,这不仅会降低浏览器性能,甚至 ...

  8. ereere

    发现没有main函数 搜索start发现有,不过f5后发现不太像 然后在字符串那里搜索flag,点进去,然后f5但是失败了,最后发现得先定位到对应的函数处才能f5  f5 逐个查看函数,找到sub_4 ...

  9. 从混乱到优雅:基于DDD的六边形架构的代码翻新指南

    前言 趁着双十一备战封板,终于又有一些时间可以梳理一下最近的心得. 最近这半年跟同事讨论比较多的是分层架构,然后就会遇到两个触及灵魂的问题,一个是如何做好分层架构,二是DDD在架构层面该如何落地. 为 ...

  10. Android 11 后的应用数据和文件

    Android应用数据的保存方式有四种,分别是应用专属存储空间.共享存储.偏好设置.数据库. 应用专属存储空间 应用专属存储空间:存放应用专属文件,主要包括两个空间,卸载后移除 内部存储空间:位于系统 ...