Show HN: Hardtime.nvim – 戒除坏习惯,掌握 Vim 移动技巧
m4xshen/hardtime.nvim
告别坏习惯,精通 Vim 移动
License
MIT license 2.1k stars 33 forks
Break bad habits, master Vim motions
Features • Installation • Usage • Configuration
RestrictKeys.mov Hints.mov
✨ Features
- 在短时间内阻止重复按键
- 为更快的 Vim 移动提供提示
- 获取您最常见的坏习惯的报告
👍🏻 Recommended workflow
不要仅仅依赖 hjkl
、方向键和鼠标,你应该:
- 使用相对跳转(例如:
5j
12-
)在屏幕内进行垂直移动。 - 使用
CTRL-U
CTRL-D
CTRL-B
CTRL-F
gg
G
在屏幕外进行垂直移动。 - 使用单词移动(
w
W
b
B
e
E
ge
gE
)进行短距离水平移动。 - 使用
f
F
t
T
,
;
0
^
$
进行中长距离水平移动。 - 尽可能使用操作符 + 移动/文本对象(例如:
ci{
y5j
dap
)。 - 使用
%
和方括号命令(参见:h [
)在括号之间跳转。
更多信息请参考这篇博客文章
⚡ Requirements
- Neovim >= v0.10.0
📦 Installation
- 通过您喜欢的包管理器安装。
{
"m4xshen/hardtime.nvim",
lazy = false,
dependencies = { "MunifTanjim/nui.nvim" },
opts = {},
},
- 在您的
init.lua
中设置插件。如果像上面那样设置了opts
,则在使用 lazy.nvim 时不需要此步骤。
require("hardtime").setup()
如果您想在插入和可视模式下看到提示消息,请将 'showmode'
设置为 false。
但是,如果您想同时看到提示消息和当前模式,您可以使用以下方法之一进行设置:
- 在状态栏上显示模式,并将
'showmode'
设置为 false。 您可以使用一些状态栏插件来做到这一点,例如 lualine.nvim。 - 将
'cmdheight'
设置为 2,以便提示消息不会被模式消息替换。 - 使用 nvim-notify 在右上角而不是命令行上显示提示消息。
🚀 Usage
Hardtime 默认启用。您可以使用以下命令更改其状态:
:Hardtime enable
启用 Hardtime:Hardtime disable
禁用 Hardtime:Hardtime toggle
切换 Hardtime
您可以使用 :Hardtime report
查看最常看到的提示。
您的日志文件位于 ~/.local/state/nvim/hardtime.nvim.log
。
🔧 Configuration
您可以将您的配置表传递到 setup()
函数或 opts
(如果您使用 lazy.nvim)。
如果选项是一个表(key = value
对),您可以将 value
设置为 false
以禁用默认值。
例子:
disabled_keys = {
["<Up>"] = false, -- 允许 <Up> 键
["<Space>"] = { "n", "x" }, -- 在普通和可视模式下禁用 <Space> 键
},
disabled_filetypes = {
lazy = false, -- 在 lazy 文件类型中启用 Hardtime
["dapui*"] = false, -- 在以 dapui 开头的文件类型中启用 Hardtime
},
Options
| Option Name | Type | Default Value | Meaning |
| ------------------ | ---------------- | ------------- | ---------------------------------------------------------------------------------- |
| max_time
| number | 1000
| 将按键视为重复按键的最大时间(以毫秒为单位)。 |
| max_count
| number | 3
| 在 max_time
期间允许的最大重复按键次数。 |
| disable_mouse
| boolean | true
| 禁用鼠标支持。 |
| hint
| boolean | true
| 启用提示消息以获得更好的命令。 |
| notification
| boolean | true
| 为受限和禁用的键启用通知消息。 |
| timeout
| number 或 boolean | 3000
| 显示通知的时间(以毫秒为单位),设置为 false
以禁用超时。 |
| allow_different_key
| boolean | true
| 允许不同的键重置计数。 |
| enabled
| boolean | true
| 默认情况下是否启用插件。 |
| resetting_keys
| table | See Config | 在哪些模式下重置计数的键。 |
| restricted_keys
| table | See Config | 在哪些模式下触发计数机制的键。 |
| restriction_mode
| string ("block" or "hint"
) | "block"
| 当 restricted_keys
触发计数机制时的行为。 |
| disabled_keys
| table | See Config | 在哪些模式下禁用的键。 |
| disabled_filetypes
| table | See Config | 在这些文件类型下禁用 Hardtime。 |
| hints
| table | See Config | key
是您要匹配的字符串模式,value
是提示消息和模式长度的表格。 了解有关 Lua string pattern 的更多信息。 |
| callback
| function(text) | vim.notify
| callback
函数可用于覆盖默认的通知行为。 |
| force_exit_insert_mode
| boolean | false
| 启用后,如果用户在插入模式下处于非活动状态,则强制退出插入模式。 |
| max_insert_idle_ms
| number | 5000
| 插入模式下允许的最大空闲时间(以毫秒为单位)。 |
| ui
| table of strings/table pair | See Config | 一个用于自定义 Hardtime report
的弹窗的选项. |
hints
example
以下是两个默认提示:
hints = {
["k%^"] = {
message = function()
return "Use - instead of k^" -- 返回您要显示的提示消息
end,
length = 2, -- 与此模式匹配的实际按键笔画的长度
},
["d[tTfF].i"] = { -- 这匹配 d + {t/T/f/F} + {任意字符} + i
message = function(keys) -- 键是一个匹配模式的键笔画字符串
return "Use " .. "c" .. keys:sub(2, 3) .. " instead of " .. keys
-- 示例:Use ct( instead of dt(i
end,
length = 4,
},
}
在discussion中查看一些自定义提示的示例!
Default config
🦾 Contributing
请阅读 CONTRIBUTING.md。
👥 Contributors
About
Break bad habits, master Vim motions