【推荐】Helix 常用命令与设置

发布时间 2024-01-02 09:05:49作者: Tmacy

上一篇 【推荐】后现代风格文本编辑器-Helix

Helix常用命令

命令名称 描述
:quit, :q 关闭当前视图
:quit!, :q! 强制关闭当前视图,忽略未保存的更改
:open, :o 从磁盘打开文件进入当前视图
:buffer-close, :bc, :bclose 关闭当前缓冲区
:buffer-close!, :bc!, :bclose! 强制关闭当前缓冲区,忽略未保存的更改
:buffer-close-others, :bco, :bcloseother 关闭除当前缓冲区外的所有缓冲区
:buffer-close-others!, :bco!, :bcloseother! 强制关闭除当前缓冲区以外的所有缓冲区
:buffer-close-all, :bca, :bcloseall 关闭所有缓冲区而不退出
:buffer-close-all!, :bca!, :bcloseall! 强制关闭所有缓冲区,忽略未保存的更改而不退出
:buffer-next, :bn, :bnext 转到下一个缓冲区
:buffer-previous, :bp, :bprev 转到上一个缓冲区
:write, :w 将更改写入磁盘 接受可选路径(:write 文件路径)
:write!, :w! 强制写入更改到磁盘,创建必要的子目录,接受可选路径(:write! some/path.txt)
:write-buffer-close, :wbc 将更改写入磁盘并关闭缓冲区,接受可选路径(:write-buffer-close some/path.txt)
:write-buffer-close!, :wbc! 强制写入更改到磁盘,创建必要的子目录并关闭缓冲区,接受可选路径(:write-buffer-close! some/path.txt)
:new, :n 创建一个新的暂存缓冲区
:format, :fmt 使用 LSP 格式化器格式化文件
:indent-style 设置编辑时的缩进样式 ('t'表示制表符,1-8 表示空格数 )
:line-ending 设置文档的默认行尾 选项:crlf, lf
:earlier, :ear 跳转回编辑历史中较早的一个点,接受多个步骤或一个时间范围
:later, :lat 跳转到编辑历史记录中的稍后点,接受多个步骤或一个时间范围
:write-quit, :wq, :x 将更改写入磁盘并关闭当前视图,接受可选路径(:wq some/path.txt)
:write-quit!, :wq!, :x! 将更改写入磁盘,并强制关闭当前视图 接受可选路径(:wq! some/path.txt)
:write-all, :wa 将所有缓冲区的更改写入磁盘
:write-all!, :wa! 强制将所有缓冲区的更改写入磁盘,创建必要的子目录
:write-quit-all, :wqa, :xa 将所有缓冲区中的更改写入磁盘并关闭所有视图
:write-quit-all!, :wqa!, :xa! 将所有缓冲区的更改写入磁盘并强制关闭所有视图(忽略未保存的更改)
:quit-all, :qa 关闭所有视图
:quit-all!, :qa! 强制关闭所有视图,忽略未保存的更改
:cquit, :cq 带退出码退出(默认 1) 接受一个可选的整数退出码(:cq 2)
:cquit!, :cq! 强制退出退出码(默认 1),忽略未保存的更改 接受一个可选的整数退出码(:cq!2)
:theme 更改编辑器主题(如果没有指定名称则显示当前主题)
:yank-join 拉取所选区域,第一个参数是分隔符 默认值是换行符
:clipboard-yank 将主选项拉入系统剪贴板
:clipboard-yank-join 将加入的选项拉入系统剪贴板,分隔符可以作为第一个参数提供,默认值为换行符
:primary-clipboard-yank 将主选项拉入系统主剪贴板
:primary-clipboard-yank-join 将选择加入到系统主剪贴板中,分隔符可以作为第一个参数提供,默认值为换行符
:clipboard-paste-after 粘贴系统剪贴板内容与选择区域后方
:clipboard-paste-before 粘贴系统剪贴板内容与选择区域前方
:clipboard-paste-replace 用系统剪贴板的内容替换所选区域
:primary-clipboard-paste-after 粘贴主剪贴板内容在所选择区域后
:primary-clipboard-paste-before 粘贴主剪贴板内容在所选择区域前
:primary-clipboard-paste-replace 用系统主剪贴板的内容替换选择内容
:show-clipboard-provider 在状态栏中显示剪贴板程序名称
:change-current-directory, :cd 更改当前工作目录
:show-directory, :pwd 显示当前工作目录
:encoding 设置编码,编码基于https://encoding.spec.whatwg.org
:character-info, :char 获取光标下字符的信息
:reload, :rl 放弃更改并从源文件重新加载
:reload-all, :rla 放弃更改并重新加载源文件中的所有文档
:update, :u 只有当文件被修改时才写入更改
:lsp-workspace-command 打开工作区命令选择器
:lsp-restart 重新启动当前文档使用的语言服务器
:lsp-stop 停止当前文档使用的语言服务器
:tree-sitter-scopes 显示 tree-sitter 作用域,主要用于主题化和开发
:tree-sitter-highlight-name 在光标下显示 tree-sitter 高亮作用域的名称
:debug-start, :dbg 从具有给定参数的给定模板启动调试会话
:debug-remote, :dbg-tcp 通过 TCP 地址连接到调试适配器,并从具有给定参数的给定模板启动调试会话
:debug-eval 在当前调试上下文中求值表达式
:vsplit, :vs 以垂直分割方式打开文件
:vsplit-new, :vnew 在垂直分割中打开新缓冲区
:hsplit, :hs, :sp 以水平分割打开文件
:hsplit-new, :hnew 在水平分割中打开新缓冲区
:tutor 打开教程
:goto, :g 转到行号
:set-language, :lang 设置当前缓冲区的语言(如果未指定值则显示当前语言)
:set-option, :set 在运行时设置一个配置。例如,要禁用搜索智能大小写,请使用':set search.smart-case false”
:toggle-option, :toggle 在运行时切换bool配置选项。例如,要切换智能大小写,请使用':toggle search.smart-case '
:get-option, :get 获取配置选项的当前值
:sort 对选择范围进行排序
:rsort 对选择中的范围倒序排序
:reflow 将当前选择的行强制设置指定的宽度
:tree-sitter-subtree, :ts-subtree 在光标下显示tree-sitter 子节点,主要用于调试查询
:config-reload 刷新用户配置
:config-open 打开用户config.toml 文件
:config-open-workspace 打开工作区config.toml 文件
:log-open 打开 helix 日志文件
:insert-output 运行 shell 命令,在每次选择前插入输出
:append-output 运行 shell 命令,在每次选择后附加输出
:pipe 将每个选择用管道输出到 shell 命令
:pipe-to 将每个选择用管道连接到 shell 命令,忽略输出
:run-shell-command, :sh 运行 shell 命令
:reset-diff-change, :diffget, :diffg 重置光标位置的变更差异
:clear-register 清除给定寄存器 如果未提供参数,则清除所有寄存器
:redraw 清除并重新渲染整个UI
:move 将当前缓冲区及其对应的文件移动到不同的路径

配置

可以通过创建config.toml配置文件来覆盖默认全局配置参数

  • Linux 和 Mac: ~/.config/helix/config.toml
  • Windows: %AppData%\helix\config.toml

? 你可以很简单在命令模式用:config-open来打开配置文件

实例配置:

theme = "onedark"

[editor]
line-number = "relative"
mouse = false

[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"

[editor.file-picker]
hidden = false

你可以使用命令行参数-c--config来指定一个配置文件,例如hx -c path/to/custom-config.toml.
此外,你可以用操作系统的USR1信号来通知Helix进程重新加载配置,比如使用命令 pkill -USR1 hx.
最后,你可以在自己工程目录下的.helix目录中放置一个 config.toml 配置文件,其中设置会合并到配置目录的config.toml中和内置配置。

编辑器

[editor]字段

参数 描述 默认值
scrolloff 附在屏幕边缘显示的滚动行数 5
mouse 启动鼠标模式 true
middle-click-paste 鼠标中键粘贴支持 true
scroll-lines 随滚轮滚动的行数 3
shell 运行shell命令时启动的shell Unix: ["sh", "-c"]
Windows: ["cmd", "/C"]
line-number 行号的显示: absolute 简单显示行号.relative 在非插入模式状态下,显示相对当前位置的行数. , relative 仍然显示当前行的绝对行号 absolute
cursorline 高亮显示所有光标所在行 false
cursorcolumn 高亮显示所有光标所在列 false
gutters 边缘区域展示的内容,可选项有diagnostics , diff ,line-numbers ,spacer, 注意diagnostics 也包括了其他特性,例如断点。如果是空,则显示1个宽度的空白 ["diagnostics", "spacer", "line-numbers", "spacer", "diff"]
auto-completion 开启自动补全 true
auto-format 启动保存时自动格式化 true
auto-save 启动在焦点移除Helix时自动保存,需要你的shell支持focus event support false
idle-timeout 按键按下后的毫秒级等待时间,使用了自动补全,应设置为0 250
preview-completion-insert 当补全项被选择时是否自动应用 true
completion-trigger-len 当前光标下,出发自动补全的最小输入长度 2
completion-replace 自动补全始终会替换整个词而非光标前的部分 false
auto-info 是否显示信息框 true
true-color 覆盖自动检测的虚拟终端的真彩设置 false
undercurl 覆盖自动检测的虚拟终端的undercurl支持 false
rulers 标尺的列位置列表,可以被languages.toml的参数覆盖 []
bufferline 在编辑器上方显示打开的缓冲区,可以是always, nevermultiple (只有存在多个缓冲区才显示) never
color-modes 是否在不同的模式下显示不同的颜色 false
text-width 行的最大长度。可以使用命令:reflow 和 软折叠设置soft-wrap.wrap-at-text-width 80
workspace-lsp-roots 相对于工程根目录的相对目录,可被看作为LSP的根目录,只能在 .helix/config.toml 设置 []
default-line-ending 行结尾的换行符,可以是 native, lf, crlf, ff, crnelnative 用于系统本地行结尾(Windows使用crlf 而不是lf). native
insert-final-newline 是否自动在最后行添加行结尾符号 true
indent-heuristic 计算新一行如何缩进: simple 只是拷贝上一行的缩进方式.tree-sitter 基于语法树计算缩进量. hybrid混合两种方式. 如果选项失效了,按照如下顺序尝试缩进方式: hybrid -> tree-sitter -> simple). hybrid

[editor.statusline] 字段

允许在编辑器的底部配置状态行

在状态行默认配置了三个区域

[ ...... LEFT .... | ... ... CENTER ... ... | .... RIGHT ..... ]

状态行元素的定义如下:

[editor.statusline]
left = ["mode", "spinner"]
center = ["file-name"]
right = ["diagnostics", "selections", "position", "file-encoding", "file-line-ending", "file-type"]
separator = "│"
mode.normal = "NORMAL"
mode.insert = "INSERT"
mode.select = "SELECT"

[editor.statusline] :状态行配置定义:

配置项 描述 默认值
left 状态行左侧的元素列表 ["mode", "spinner", "file-name", "read-only-indicator", "file-modification-indicator"]
center 状态行中间的元素列表 []
right 状态行右侧的元素列表 ["diagnostics", "selections", "register", "position", "file-encoding"]
separator 状态栏用来分割的字符 "│"
mode.normal 普通模式在mode 元素中显示文本 "NOR"
mode.insert 插入模式在mode 元素中显示文本 "INS"
mode.select 视图模式在mode 元素中显示文本 "SEL"

状态栏元素定义

配置项 描述
mode 当前的模式 (mode.normal/mode.insert/mode.select)
spinner 一个显示lsp正在运转的指示器
file-name 打开的文件路径/名字
file-base-name 打开的文件的基础名称
file-modification-indicator 显示文件是否修改过的指示器( [+] 表示更改未保存)
file-encoding 打开的文件的编码格式(如果不是utft-8则显示)
file-line-ending 文件的行结尾符号The(CRLF 或 LF)
read-only-indicator 显示 [readonly] 的指示器,表示文件不可写入
total-line-numbers 打开的文件总行数
file-type 打开的文件类型
diagnostics 警告或错误的数量
workspace-diagnostics 工作区的警告或错误的数量
selections 当前被选中的数量
primary-selection-length 在主选择中的字符个数
position 光标的位置
position-percentage 光标所在位置在总行数中百分比
separator editor.statusline.separator定义的字符(默认:"│")
spacer 在元素之间插入一个空格,可以指定多个空格
version-control 在打开的工程中,当前分支名称或待提交的哈希值
register 当前选择的寄存器

[editor.lsp] 字段

配置项 描述 默认值
enable 启动LSP服务. 设置false会完全关闭所有的语言服务 true
display-messages 在状态栏显示LSP进程信息[1] false
auto-signature-help 启动自动提醒帮助(参数列表) true
display-inlay-hints 显示嵌入的提醒[2] false
display-signature-help-docs 在符号帮助弹窗显示文档 true
snippets 启动片段补全。需要lsp服务启动 (:lsp-restart) ,加载配置生效 :config-reload/:set. true
goto-reference-include-declaration 在跳转引用弹窗中包含声明 true

[editor.cursor-shape] 字段

定义在每个模式下光标的形状,包括:block, bar, underline, or hidden.

? 由于终端环境的限制,只有主光标才能改变形状

配置项 描述 默认值
normal 在普通模式下的光标形状 block
insert 在插入模式下的光标形状 block
select 在选择模式下的光标形状 block

[editor.file-picker] 字段

设置文件选择器和全局搜索的配置项。忽略一个文件意味着在Helix文件选择器和全局搜索中是不可见的

所有git相关的配置项只在git工程目录下生效。

配置项 描述 默认值
hidden 启动忽略隐藏文件 true
follow-symlinks 跟随符号链接而非忽略 true
deduplicate-links 忽略在选择器中已显示文件的符号链接 true
parents 开启在上层目录中读取被忽略的文件 true
ignore 开启读取定义在.ignore 中的文件 true
git-ignore 开启读取定义在.gitignore 中的文件 true
git-global 开启读取全局 .gitignore, 其完整路径在git配置项core.excludesfile中定义 true
git-exclude 开启读取定义在.git/info/exclude 中的文件 true
max-depth 设置一个整数作为递归最大深度 默认是none

[editor.auto-pairs] 字段

启动自动补全括号功能,可以简单设置为一个布尔值,或者设置一对或单个符号的映射
取消自动补全可以设置 auto-pairsfalse:

[editor]
auto-pairs = false # defaults to `true`

默认的括号配对包括 () {} [] '' "" ``, 但是也可以自己定义,例如:

[editor.auto-pairs]
'(' = ')'
'{' = '}'
'[' = ']'
'"' = '"'
'`' = '`'
'<' = '>'

此外,这些设置可以作用与某一个语言配置。除非编辑器设置是false,否则这个配置会覆盖这个语言的编辑器配置

例如:languages.toml 中添加 <> 并移除 ''

[[language]]
name = "rust"

[language.auto-pairs]
'(' = ')'
'{' = '}'
'[' = ']'
'"' = '"'
'`' = '`'
'<' = '>'

[editor.search] 字段

搜索功能的指定选项

配置项 描述 默认值
smart-case 启动正则表达式搜索的智能大小写匹配(除非正则表达式中包含大写字母,否则不区分大小写) true
wrap-around 搜索的结果是否可以循环跳转 true

[editor.whitespace] 字段

使用可视字符渲染空格的选项,使用:set whitespace.render all 来临时启用可视空格。

配置项 描述 默认值
render 是否渲染空格.可以是 "all" 或者"none", 或者使用这些字符space, nbsp, tab, 和newline "none"
characters 使用任意字符来渲染空格,子配置项包括tab, space, nbsp, newlinetabpad 参见示例

示例:

[editor.whitespace]
render = "all"
# 或者控制每一个字符
[editor.whitespace.render]
space = "all"
tab = "all"
newline = "none"

[editor.whitespace.characters]
space = "·"
nbsp = "⍽"
tab = "→"
newline = "⏎"
tabpad = "·" # tab空格会显示: "→···" (依赖于tab宽度)

[editor.indent-guides] 字段

渲染垂直缩进符号的选项

配置项 描述 默认值
render 是否渲染缩进符号 false
character 使用任意符号作为缩进符号
skip-levels 缩进级别被忽略的等级数 0

Example:

[editor.indent-guides]
render = true
character = "╎" # 一些工作正常的符号: "▏", "┆", "┊", "⸽"
skip-levels = 1

[editor.gutters]字段

简单来说,editor.gutters 接受一组边界的类型,可以作为所有边界容器的默认设置

[editor]
gutters = ["diff", "diagnostics", "line-numbers", "spacer"]

[editor.gutters] 字段被用于定义边界,这个字段是最顶层设置,也可设置特定边界的子字段内容

配置项 描述 默认值
layout 一列可以显示的边界内容 ["diagnostics", "spacer", "line-numbers", "spacer", "diff"]

例如:

[editor.gutters]
layout = ["diff", "diagnostics", "line-numbers", "spacer"]

[editor.gutters.line-numbers] 字段

行数设置选项

配置项 描述 默认值
min-width 使用的符号的最小数量 3

例如:

[editor.gutters.line-numbers]
min-width = 1

[editor.gutters.diagnostics] 字段

当前不开放配置

[editor.gutters.diff] 字段

当前不开放配置

[editor.gutters.spacer] 字段

当前不开放配置

[editor.soft-wrap] 字段

视图边界线的选项(跟随视图自动换行)

配置项 描述 默认值
enable 启动自动换行功能,根据视图宽度可软换行 false
max-wrap 行结尾处最大剩余空格数量 20
max-indent-retain 处理强制换行时可以延续的最大缩进数量 40
wrap-indicator 在软换行前插入的字符符号,可以用ui.virtual.wrap高亮显示
wrap-at-text-width 软换行使用text-width配置的宽度而随着窗口的大小而调整. false

例如:

[editor.soft-wrap]
enable = true
max-wrap = 25 # 增加该值可以降低强制从一个词中间软换行
max-indent-retain = 0
wrap-indicator = ""  # 设置后可以不现实软换行符号

[editor.smart-tab] 字段

配置项 描述 默认值
enable 如果设置是true,当光标左边是非空格字符,按下tab会执行move_parent_node_end,而不是插入一个tab字符。如果光标左边只有空格,按下tab会插入一个tab字符。默认强制插入一个tab字符的快捷键是Shift-tab. true
supersede-menu 正常情况下,一个菜单显示在屏幕上,例如自动补全触发,tab按键会循环遍历选项。这意味着当菜单出现在屏幕上,是不能触发smart-tab的。如果这个设置项设置为true, smart-tab 命令一直会被触发 ,这意味着不能使用tab循环遍历菜单选项。 那么必须使用另一种快捷键操作,例如 箭头按键或者C-n/C-p. false

  1. 默认情况,一个过程指示器会在状态栏的文件路径上显示。 ↩︎

  2. 你可以还需要在LSP中激活服务,嵌入提醒还在改进中,在某些情况下会有些滞后. 请汇报bug以便我们能修复它们! ↩︎