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、方向键和鼠标,你应该:
- 使用相对跳转(例如:
5j12-)在屏幕内进行垂直移动。 - 使用
CTRL-UCTRL-DCTRL-BCTRL-FggG在屏幕外进行垂直移动。 - 使用单词移动(
wWbBeEgegE)进行短距离水平移动。 - 使用
fFtT,;0^$进行中长距离水平移动。 - 尽可能使用操作符 + 移动/文本对象(例如:
ci{y5jdap)。 - 使用
%和方括号命令(参见: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