跳至内容

m4xshen/hardtime.nvim

告别坏习惯,精通 Vim 移动

License

MIT license 2.1k stars 33 forks


Break bad habits, master Vim motions

Busted Neovim version

FeaturesInstallationUsageConfiguration

RestrictKeys.mov Hints.mov

✨ Features

👍🏻 Recommended workflow

不要仅仅依赖 hjkl、方向键和鼠标,你应该:

  1. 使用相对跳转(例如:5j 12-)在屏幕内进行垂直移动。
  2. 使用 CTRL-U CTRL-D CTRL-B CTRL-F gg G 在屏幕外进行垂直移动。
  3. 使用单词移动(w W b B e E ge gE)进行短距离水平移动。
  4. 使用 f F t T , ; 0 ^ $ 进行中长距离水平移动。
  5. 尽可能使用操作符 + 移动/文本对象(例如:ci{ y5j dap)。
  6. 使用 % 和方括号命令(参见 :h [)在括号之间跳转。

更多信息请参考这篇博客文章

⚡ Requirements

📦 Installation

  1. 通过您喜欢的包管理器安装。
{
  "m4xshen/hardtime.nvim",
  lazy = false,
  dependencies = { "MunifTanjim/nui.nvim" },
  opts = {},
},
  1. 在您的 init.lua 中设置插件。如果像上面那样设置了 opts,则在使用 lazy.nvim 时不需要此步骤。
require("hardtime").setup()

如果您想在插入和可视模式下看到提示消息,请将 'showmode' 设置为 false。 但是,如果您想同时看到提示消息和当前模式,您可以使用以下方法之一进行设置:

🚀 Usage

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

Topics

vim lua neovim neovim-plugin