概要
- hardtime.nvim はVim操作の悪習慣を防止し、効率的な移動を習得するためのNeovimプラグインです。
- キーの連打制限や、より良い操作方法のヒント表示、行動レポート機能を提供します。
- 推奨ワークフローや主な機能、インストール・設定方法について解説します。
- カスタマイズ性が高く、ユーザー独自の設定やヒント追加も可能です。
- プラグインの有効・無効切り替えや、レポート閲覧方法も紹介します。
hardtime.nvim:Vim操作の悪習慣を断ち切るNeovimプラグイン
主な特徴
- 短時間内のキー連打をブロック し、無駄な操作を防止すること
- より効率的なVimモーションのヒント を表示すること
- よくある悪習慣のレポート を確認すること
推奨ワークフロー
- 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, ^, $ を使うこと
- operator + motion/text-object(例: ci{, y5j, dap)を多用すること
- 括弧間のジャンプ: %や角括弧コマンド(:h [) を活用すること
- 詳細は公式ブログ記事で確認すること
必要要件
- Neovim v0.10.0以上 をインストールすること
インストール方法
- お好みのパッケージマネージャーでインストールすること
- 例:
{ "m4xshen/hardtime.nvim", lazy = false, dependencies = { "MunifTanjim/nui.nvim" }, opts = {}, },
- 例:
init.luaでプラグインをセットアップすること- lazy.nvimを使い、optsを指定している場合は不要
- 例:
require("hardtime").setup()
- 例:
- lazy.nvimを使い、optsを指定している場合は不要
ヒント表示設定
- 挿入モードやビジュアルモードでヒントを表示したい場合、'showmode'をfalseに設定すること
- モード表示も同時に見たい場合、以下の方法を検討すること
- ステータスラインプラグイン(例: lualine.nvim)でモード表示し、'showmode'をfalseにすること
- 'cmdheight'を2に設定し、ヒントとモード両方を表示すること
- nvim-notifyでヒントを右上に通知として表示すること
使い方
- Hardtimeは デフォルトで有効
- 状態変更コマンド
:Hardtime enable:有効化すること:Hardtime disable:無効化すること:Hardtime toggle:切り替えること
- よく表示されたヒントは
:Hardtime reportで確認すること- ログファイル:
~/.local/state/nvim/hardtime.nvim.log
- ログファイル:
設定例と主なオプション
- 設定テーブルを
setup()またはoptsに渡してカスタマイズすること - デフォルト値を無効化したい場合、値をfalseに設定すること
- 例:
disabled_keys = { ["<Up>"] = false, ["<Space>"] = { "n", "x" }, }, disabled_filetypes = { lazy = false, ["dapui*"] = false, },
- 例:
- 主なオプション一覧
max_time:連打とみなす最大時間(ms)を指定することmax_count:最大連打回数を指定することdisable_mouse:マウスサポートを無効化することhint:ヒント表示を有効化することnotification:通知メッセージを有効化することtimeout:通知表示時間(ms)またはfalseで無効化することallow_different_key:異なるキーでカウントをリセットすることenabled:デフォルト有効・無効を切り替えることresetting_keys:カウントをリセットするモードを指定することrestricted_keys:カウント機構を発動するキーとモードを指定することrestriction_mode:制限発動時の挙動("block"または"hint")を選択することdisabled_keys:無効化するキーとモードを指定することdisabled_filetypes:無効にするファイルタイプを指定することhints:ヒントパターンとメッセージを指定することcallback:通知動作をカスタマイズする関数を指定することforce_exit_insert_mode:挿入モードでの無操作時に強制終了することmax_insert_idle_ms:挿入モードで許容する最大無操作時間(ms)を指定することui:Hardtimeレポート用のポップアップUIをカスタマイズすること
ヒントカスタマイズ例
- デフォルトヒント例
["k%^"] = { message = function() return "Use - instead of k^" end, length = 2, }["d[tTfF].i"] = { message = function(keys) return "Use " .. "c" .. keys:sub(2, 3) .. " instead of " .. keys end, length = 4, }
- 独自ヒントの追加方法は公式ディスカッションを参照すること
貢献・コントリビューション
- 詳細は CONTRIBUTING.md を参照すること
- コントリビューター一覧は公式リポジトリで確認すること
このプラグインを活用し、Vim操作の効率化と悪習慣の改善を実現すること。