{"id":15288875,"url":"https://github.com/rcmdnk/vim_ahk","last_synced_at":"2026-04-16T04:03:55.615Z","repository":{"id":9717458,"uuid":"11672783","full_name":"rcmdnk/vim_ahk","owner":"rcmdnk","description":"Setting file to emulate vim with AutoHotkey","archived":false,"fork":false,"pushed_at":"2026-04-14T16:54:10.000Z","size":1469,"stargazers_count":824,"open_issues_count":14,"forks_count":111,"subscribers_count":25,"default_branch":"master","last_synced_at":"2026-04-14T18:28:19.862Z","etag":null,"topics":["ahk","autohotkey","ime","vim","vim-mode","windows"],"latest_commit_sha":null,"homepage":"","language":"AutoHotkey","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rcmdnk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"rcmdnk","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2013-07-25T22:51:03.000Z","updated_at":"2026-04-14T16:54:13.000Z","dependencies_parsed_at":"2025-08-11T12:16:51.243Z","dependency_job_id":"2bcc2ad4-2d35-44e9-a621-aff5cbc2b064","html_url":"https://github.com/rcmdnk/vim_ahk","commit_stats":{"total_commits":407,"total_committers":18,"mean_commits":22.61111111111111,"dds":"0.19656019656019652","last_synced_commit":"99b31947411b99f3b2123cfbffda087e8e9dd9e9"},"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/rcmdnk/vim_ahk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rcmdnk%2Fvim_ahk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rcmdnk%2Fvim_ahk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rcmdnk%2Fvim_ahk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rcmdnk%2Fvim_ahk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rcmdnk","download_url":"https://codeload.github.com/rcmdnk/vim_ahk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rcmdnk%2Fvim_ahk/sbom","scorecard":{"id":764609,"data":{"date":"2025-08-11","repo":{"name":"github.com/rcmdnk/vim_ahk","commit":"56f4cc097f8f50c4e9db24c52e3dff39b51842a6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"13 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/22 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":9,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/build_test.yml:11","Warn: no topLevel permission defined: .github/workflows/build_test.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build_test.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/rcmdnk/vim_ahk/build_test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_test.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/rcmdnk/vim_ahk/build_test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build_test.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/rcmdnk/vim_ahk/build_test.yml/master?enable=pin","Info:   0 out of   1 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.16.0 not signed: https://api.github.com/repos/rcmdnk/vim_ahk/releases/239026507","Warn: release artifact v0.15.0 not signed: https://api.github.com/repos/rcmdnk/vim_ahk/releases/234645313","Warn: release artifact v0.14.2 not signed: https://api.github.com/repos/rcmdnk/vim_ahk/releases/190771072","Warn: release artifact v0.14.1 not signed: https://api.github.com/repos/rcmdnk/vim_ahk/releases/189925200","Warn: release artifact v0.13.3 not signed: https://api.github.com/repos/rcmdnk/vim_ahk/releases/189924277","Warn: release artifact v0.16.0 does not have provenance: https://api.github.com/repos/rcmdnk/vim_ahk/releases/239026507","Warn: release artifact v0.15.0 does not have provenance: https://api.github.com/repos/rcmdnk/vim_ahk/releases/234645313","Warn: release artifact v0.14.2 does not have provenance: https://api.github.com/repos/rcmdnk/vim_ahk/releases/190771072","Warn: release artifact v0.14.1 does not have provenance: https://api.github.com/repos/rcmdnk/vim_ahk/releases/189925200","Warn: release artifact v0.13.3 does not have provenance: https://api.github.com/repos/rcmdnk/vim_ahk/releases/189924277"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T00:25:16.130Z","repository_id":9717458,"created_at":"2025-08-23T00:25:16.130Z","updated_at":"2025-08-23T00:25:16.130Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31870517,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ahk","autohotkey","ime","vim","vim-mode","windows"],"created_at":"2024-09-30T15:54:10.406Z","updated_at":"2026-04-16T04:03:55.593Z","avatar_url":"https://github.com/rcmdnk.png","language":"AutoHotkey","funding_links":["https://github.com/sponsors/rcmdnk"],"categories":[],"sub_categories":[],"readme":"# vim_ahk\n\nAutoHotkey scripts and executable builds for Vim emulation on Windows.\n\n`vim.ahk` is the main script for [AutoHotkey](https://www.autohotkey.com/).\n\n`vim_ahk.exe` is a standalone executable built from `vim.ahk` (available on [Releases](https://github.com/rcmdnk/vim_ahk/releases)).\n\nIf you are looking for similar behavior on macOS, see [Karabiner-Elements complex_modifications rules by rcmdnk](https://rcmdnk.com/KE-complex_modifications/).\n\n## AutoHotkey v1 or v2\n\nThis script is for AutoHotkey v2.\n\nIf you are using AutoHotkey v1, please use release [v0.13.2](https://github.com/rcmdnk/vim_ahk/tree/v0.13.2) (or [ahk_v1](https://github.com/rcmdnk/vim_ahk/tree/ahk_v1) branch).\n\n## Installation\n\n### Scripts\n\nIf AutoHotkey is already installed, open `vim.ahk` with AutoHotkey.\n\nIf you run AutoHotkey with another script, include `vim.ahk` from that script.\nCopy `vim.ahk` and the `lib` directory under the same parent directory as your script, then add:\n\n    #Include  %A_LineFile%\\..\\vim.ahk\n\nto the end of the \u003ca href=\"https://www.autohotkey.com/docs/v2/Scripts.htm#auto\"\u003eauto-execute section\u003c/a\u003e.\n\n### Executable\n\nYou can also use **vim_ahk.exe**, which runs standalone without AutoHotkey.\n\nDownload the latest zip from [Releases](https://github.com/rcmdnk/vim_ahk/releases), extract it, and run **vim_ahk.exe**.\n\n\u003e [!NOTE]\n\u003e Place the **vim_ahk_icons** folder in the same directory as **vim_ahk.exe**.\n\u003e Otherwise, tray menu icons will not work.\n\n### Build executable from the source\n\nClone this repository, move to the `vim_ahk` directory, and run **build.bat**.\n\n* Double-click the file.\n* Or run `.\\build.bat` in PowerShell or Command Prompt.\n\nThis creates a **vim_ahk** folder containing **vim_ahk.exe** and **vim_ahk_icons**.\n\n## Applications (VimGroup)\nBy default, vim mode is enabled for:\n\n* Notepad (メモ帳)\n* WordPad\n* TeraPad\n* Windows Explorer\n* Thunderbird (only sending window)\n* Microsoft PowerPoint\n* Microsoft Word\n* Evernote\n* Visual Studio Code\n* TeXworks\n* TeXstudio\n* Q-dir\n* OneNote\n* Apps running under `ahk_exe ApplicationFrameHost.exe`\n\nYou can change this list from the tray icon's right-click menu\n(find `VimMenu`-`Settings` in the list),\nor launch the setting window by `Ctrl-Alt-Shift-v`.\n\nIf you want to configure applications directly in script, set `VimGroup`\nbefore `Vim := VimAhk(A_LineFile)` in `vim.ahk`,\nor set it before `#Include` in your own script.\nYou can inspect title/class/process with AutoHotkey Window Spy.\n\nExample line:\n\n    VimGroup := \"ahk_exe chrome.exe,ahk_exe firefox.exe\"\n\nSpecify multiple applications as a comma-separated list.\n\n\u003e [!NOTE]\n\u003e Setting `VimGroup` this way replaces the default list.\n\u003e To **add** entries while keeping defaults, append the default entries after your own list:\n\u003e \n\u003e     ahk_exe notepad.exe,ahk_exe explorer.exe,ahk_exe wordpad.exe,ahk_exe TeraPad.exe,作成,Write:,ahk_exe POWERPNT.exe,ahk_exe WINWORD.exe,ahk_exe Evernote.exe,ahk_exe Code.exe,ahk_exe onenote.exe,OneNote,ahk_exe texworks.exe,ahk_exe texstudio.exe\n\u003e \n\u003e Or configure this from the GUI settings window described below.\n\nBy default, `VimSetTitleMatchMode` is `2` (`Contain`).\n\nIf you set `OneNote`, all windows with a title containing `OneNote`\n(e.g. `XXX's OneNote`) will be included.\nIf you set `VimSetTitleMatchMode` as 3, only the exact title of `OneNote` will be included.\n\nIt may not work on OneNote. OneNote may have a window name like\n**User's Notebook - OneNote**, instead of **OneNote**.\n\nIn that case, check the OneNote window title in Window Spy.\n\nWindow Spy shows Window Title, Class, and Process, for example:\n\n    User's Notebook - OneNote\n    ahk_class ApplicationFrameWindow\n    ahk_exe ApplicationFrameHost.exe\n\nIf you add any of these lines to `VimGroup`, vim_ahk will work on OneNote.\nIf you set `ahk_class ApplicationFrameWindow` or `ahk_exe ApplicationFrameHost.exe`,\nvim_ahk will also match other apps that use the same class/process\n(many Microsoft Store apps).\n\nExamples of applications:\n\n* Chrome: `ahk_exe chrome.exe`\n* Firefox: `ahk_exe firefox.exe`\n* Excel: `ahk_exe EXCEL.EXE`\n* LibreOffice: `ahk_exe soffice.bin` (for all LibreOffice applications)\n\n## Options\n\nIn addition to `VimGroup`, you can set the following options in your script.\nAll of them can also be changed from the settings GUI.\n\n|Option|Description|Default|\n|:-----|:----------|:------|\n|VimEscNormal|If 1, pressing ESC enters normal mode.|1|\n|VimEscNormalDirect|If 1, ESC enters normal mode even while IME is converting. If 0, ESC behaves as normal ESC while IME is converting.|1|\n|VimSendEscNormal|If 1, a short ESC press sends ESC in normal mode.|0|\n|VimLongEscNormal|If 1, short and long press behavior of ESC is swapped.|0|\n|VimCtrlBracketToEsc|If 1, Ctrl-[ behaves as ESC.\u003cbr\u003eIf VimCtrlBracketNormal is 0, Ctrl-[ always sends ESC.\u003cbr\u003eIf both are 1, long press Ctrl-[ sends ESC.|1|\n|VimCtrlBracketNormal|If 1, pressing Ctrl-[ enters normal mode.|1|\n|VimCtrlBracketNormalDirect|If 1, Ctrl-[ enters normal mode even while IME is converting. If 0, Ctrl-[ behaves as ESC while IME is converting.|1|\n|VimSendCtrlBracketNormal|If 1, a short Ctrl-[ press sends Ctrl-[ in normal mode.|0|\n|VimLongCtrlBracketNormal|If 1, short and long press behavior of Ctrl-[ is swapped.|0|\n|VimChangeCaretWidth|If 1, caret width changes by mode (thick in normal/visual, thin in insert).|0|\n|VimRestoreIME|If 1, IME status is saved in insert mode and restored when returning to insert mode.|1|\n|VimJJ|If 1, `jj` enters normal mode from insert mode.|0|\n|VimTwoLetter|Two-letter mappings to enter normal mode from insert mode.\u003cbr\u003eSet one pair per line, exactly two different letters per pair.||\n|VimDisableUnused|Disable level for unused keys outside insert mode:\u003cbr\u003e\u003col\u003e\u003cli\u003eDo not disable unused keys\u003c/li\u003e\u003cli\u003eDisable alphabets (+Shift) and symbols\u003c/li\u003e\u003cli\u003eDisable all, including modified keys (e.g. Ctrl+Z)\u003c/li\u003e\u003c/ol\u003e|1|\n|VimSetTitleMatchMode|SetTitleMatchMode mode:\u003cbr\u003e\u003col\u003e\u003cli\u003eStart with\u003c/li\u003e\u003cli\u003eContain\u003c/li\u003e\u003cli\u003eExact match\u003c/li\u003e\u003cli\u003eRegular expression (`RegEx`)\u003c/li\u003e\u003c/ol\u003e|2|\n|VimSetTitleMatchModeFS|SetTitleMatchMode speed:\u003cbr\u003e\u003col\u003e\u003cli\u003eFast: Text is not detected for some edit controls.\u003c/li\u003e\u003cli\u003eSlow: Works for all windows, but slower.\u003c/li\u003e\u003c/ol\u003e|Fast|\n|VimIconCheckInterval|Interval (ms) to check vim_ahk status and update tray icon.\u003cbr\u003eIf set to 0, the original AHK icon is used.|1000|\n|VimVerbose|Verbose level:\u003cbr\u003e\u003col\u003e\u003cli\u003eNo output.\u003c/li\u003e\u003cli\u003eMinimum tooltip (mode only).\u003c/li\u003e\u003cli\u003eTooltip (all information).\u003c/li\u003e\u003cli\u003eDebug message box (does not auto-close).\u003c/li\u003e\u003c/ol\u003e|1|\n|VimAppList|Application list mode:\u003cbr\u003e\u003cul\u003e\u003cli\u003eAll: Enable vim_ahk on all applications (ignore the list).\u003c/li\u003e\u003cli\u003eAllow List: Use the list as an allow list.\u003c/li\u003e\u003cli\u003eDeny List: Use the list as a deny list.\u003c/li\u003e\u003c/ul\u003e|Allow List|\n|VimGroup|Applications where vim_ahk is enabled. Set one application per line (Window Title/Class/Process).|See **Applications** section|\n\nSet options before including **vim.ahk** in your script\ninside the auto-execute section, for example:\n\n    VimVerbose := 2\n    #Include \\path\\to\\vim.ahk\n\nIf you want to change them directly in `vim.ahk`,\nset these variables before `Vim := VimAhk(A_LineFile)`.\n\n\u003e [!NOTE]\n\u003e These variables overwrite default values.\n\u003e After checking these variables, the configuration file is read.\n\u003e If you have already run vim_ahk, the configuration file already exists and settings are loaded from it.\n\u003e To apply updated script defaults, use `Reset` in the settings GUI.\n\n\u003e [!NOTE]\n\u003e VimIconCheckInterval example\n\u003e\n\u003e If `VimIconCheckInterval` is non-zero, the tray icon changes\n\u003e when mode changes or focus moves between enabled/disabled apps.\n\u003e\n\u003e ![trayicon](https://raw.githubusercontent.com/rcmdnk/vim_ahk/master/pictures/trayicon.gif \"trayicon\")\n\n\u003e [!WARNING]\n\u003e VimChangeCaretWidth\n\u003e\n\u003e Caret width can be changed only in specific applications: WordPad, Word, and OneNote.\n\u003e On Notepad or Explorer, the caret width is kept but does not change.\n\u003e\n\u003e For most other applications, the caret width is kept as the original width.\n\u003e\n\u003e When this option is enabled, the current window briefly loses focus when the mode is changed.\n\u003e\n\u003e If you enable this option and switch to a thick caret in normal mode, then disable the option,\n\u003e the cursor may remain thick.\n\u003e To revert it, re-enable the option, enter insert mode in a supported app (for example WordPad), then disable it again.\n\n## GUI Option Setting Window\n\nYou can change these options from the tray icon right-click menu\n(find `VimMenu`-`Settings` in the list),\nor launch the setting window by `Ctrl-Alt-Shift-v`.\n\n![traymenu](https://raw.githubusercontent.com/rcmdnk/vim_ahk/master/pictures/traymenu.jpg \"traymenu\")\n\n![settings_keys](https://raw.githubusercontent.com/rcmdnk/vim_ahk/master/pictures/settings_keys.png \"settings_keys\")\n![settings_applications](https://raw.githubusercontent.com/rcmdnk/vim_ahk/master/pictures/settings_applications.png \"settings_applications\")\n![settings_status](https://raw.githubusercontent.com/rcmdnk/vim_ahk/master/pictures/settings_status.png \"settings_status\")\n![settings_configuration](https://raw.githubusercontent.com/rcmdnk/vim_ahk/master/pictures/settings_configuration.png \"settings_configuration\")\n\nHere you can add applications, change mode-switch keys, adjust verbose level,\nor import/export the configuration file.\n\nIf you import a configuration file, settings are staged and only applied\nwhen you click `Apply` or `OK`.\n\nIf you click `Reset`, default settings are shown in the window.\nThey are applied only when you click `Apply` or `OK`.\n\nThese **default settings** are then overridden by\nyour script-level `VimXXX` options described above.\n(`Reset` restores built-in defaults plus your script defaults.)\n\n## Global shortcut keys\n\n|Key|Function|\n|:----------:|:-------|\n|Ctrl-Alt-Shift-v|Open the GUI settings window.|\n|Ctrl-Alt-Shift-s|Suspend/resume vim_ahk.|\n|Ctrl-Alt-Shift-c|Show the status window (only in VimGroup apps).|\n\n## Main Modes\n\nThe main modes are:\n\n|Mode|Description|\n|:---|:----------|\n|Insert mode|Default Windows input state.|\n|Normal mode|Vim-like movement and command mode (`hjkl`, `w`, and more).|\n|Visual mode|Character-wise and line-wise selection mode.|\n|Command mode|Command-line mode for save/quit style commands.|\n\nThe initial state is insert mode. Press `ESC` or `Ctrl-[` to enter normal mode.\n\nIn normal mode, press `i` to return to insert mode.\n\nPress `v` for character-wise visual mode and `V` for line-wise visual mode.\n\nPress `:` to enter command mode with save/quit commands.\n\n## Available commands in the insert mode\n\n|Key/Commands|Function|\n|:----------:|:-------|\n|ESC/Ctrl-[|Enter normal mode. Long press (0.5s) sends the original ESC/Ctrl-[ key.|\n|jj|Enter the normal mode, if enabled.|\n|Custom two letters|If two-letter mapping is set.|\n\nESC/Ctrl-[ turn off IME if IME is on.\nESC behaves as normal ESC while IME is in conversion.\nCtrl-[ switches off IME and enters the normal mode even if IME is on.\n\nIf `VimLongEscNormal` (`VimLongCtrlBracketNormal`) is disabled (`0`), long-press ESC (Ctrl-[) sends the original key.\n\nIf `VimLongEscNormal` (`VimLongCtrlBracketNormal`) is enabled,\na single press sends the original key\nand a long press will change the mode to the normal mode.\n\nIf using a custom two-letter hotkey to enter the normal mode, the two letters must be different.\n\n\u003e [!WARNING]\n\u003e A character can be used in only one two-letter mapping. If you set `ab` and `bc`, `ba` (press `b` then `a`) does not work.\n\n\n## Available commands in the normal mode\n\n### Mode Change\n\n|Key/Commands|Function|\n|:----------:|:-------|\n|i/I/a/A/o/O|Enter insert mode (cursor/start of line/next char/end of line/new line below/new line above).|\n|v/V/Ctrl-v|Enter visual mode (character-wise/line-wise/block-like behavior).|\n|:|Enter command-line mode.|\n\n### Move\n\n|Key/Commands|Function|\n|:----------:|:-------|\n|h/j/k/l|Left/Down/Up/Right.|\n|0/$| Move to the start/end of the line.|\n|Ctrl-a/Ctrl-e|Move to the start/end of the line (Emacs-like).|\n|^| Move to the starting non-whitespace character of the line.|\n|w/W| Move to the beginning of the next word.|\n|e/E| Move to the end of the word. (Actually, move to the beginning of the next word and move one character left.)|\n|b/B| Move to the beginning of the previous word.|\n|Ctrl-u/Ctrl-d|Move up/down 10 lines.|\n|Ctrl-b/Ctrl-f| PageUp/PageDown.|\n|gg/G|Go to the top/bottom of the file.|\n|Space| Right.|\n|Enter| Move to the beginning of the next line.|\n\n\u003e [!NOTE]\n\u003e Enter movement works only in editor-like apps; in Explorer/Q-dir it behaves as normal Enter.\n\nRepeat counts are available for many commands.\n\n|Example Commands|Action|\n|:----------:|:-------|\n|4j| Down 4 lines|\n|3w| Move 3 words forward|\n|100j| Down 100 lines|\n\n### Yank/Cut(Delete)/Change/Paste\n\n|Key/Commands|Function|\n|:----------:|:-------|\n|yy, Y| Copy the line.|\n|dd| Cut the line.|\n|D| Cut from here to the end of the line.|\n|cc| Change the line (enter the insert mode).|\n|C| Cut from here to the end of the line and enter the insert mode.|\n|x/X| Delete a character under/before the cursor (not registered in the clipboard).|\n|p/P| Paste to the next/current place. If copy/cut was done with the line-wise visual mode, it pastes to the next/current line. Some commands (such yy/dd) also force to paste as line-wise.|\n|yiw/diw/ciw| Copy/cut/change current word.|\n\ny/d/c + move command combinations are also available.\n* e.g.) `yw` -\u003e copy next one word.\n* e.g.) `d3w` -\u003e delete next 3 words.\n\n### Others\n\n|Key/Commands|Function|\n|:----------:|:-------|\n|u/Ctrl-r| Undo/Redo.|\n|r/R| Replace one character/multiple characters.|\n|J| Combine two lines.|\n|.|Replace the following word with clipboard content (useful with search).|\n|~| Change case.|\n|/|Start search (opens find box).|\n|n/N|Search next/previous (some apps support only next).|\n|*| Search the word under the cursor.|\n|ZZ/ZQ|Save and Quit/Quit.|\n\n## Available commands in visual mode\n\n|Key/Commands|Function|\n|:----------:|:-------|\n|ESC/Ctrl-[| Enter the normal mode.|\n|Move command| Most move commands in the normal mode are available.|\n|y/d/x/c|Copy/Cut/Cut/Cut+insert (`d` = `x`).|\n|Y/D/X/C|Move to end of line, then Copy/Cut/Cut/Cut+insert (`D` = `X`).|\n|iw| Select the current word.|\n|*| Search the selected word.|\n\n## Available commands in the command mode\n\n|Key/Commands|Function|\n|:----------:|:-------|\n|ESC/Ctrl-[| Enter the normal mode.|\n|w + RETURN|Save.|\n|w + SPACE|Save as.|\n|w + q|Save and quit.|\n|q|Quit.|\n|h|Open application help.|\n\n## Application-specific settings\n\n### Q-dir\n\nInspired by [ranger](https://github.com/ranger/ranger), a console file manager with VI key bindings.\n\n#### Available commands in the normal mode\n\n|Key/Commands|Function|\n|:----------:|:-------|\n|h/l|Go back/forward in directory history.|\n|i/k|Select down/up.|\n|Alt+u/i/j/k| Select left upper/right upper/left lower/right lower pane.|\n|'|Open Quick-links menu.|\n\n## Testing\n\nRun tests with `tests/run_vimahk_tests.ahk`. It opens Notepad and a Vim window, then starts vim_ahk.\n\nThe test system uses `tests/testcases.txt`, which defines keystroke sequences sent to vim_ahk.\nThe resulting text in the opened windows is then compared.\n\nThese tests can be flaky, so use them as guidance and for path coverage/error checks.\nRun tests with a default INI.\n\n## References (Japanese)\n\n* [vim_ahkでウィンドウを定期的にチェックしてトレイアイコンを変えられる様にした](https://rcmdnk.com/blog/2017/11/22/computer-autohotkey-vim/)\n* [vim_ahkで有効にするアプリの変更もメニューから出来る様にした](https://rcmdnk.com/blog/2017/11/14/computer-windows-autohotkey/)\n* [vim_ahkでメニューから設定変更出来る様にした](https://rcmdnk.com/blog/2017/11/11/computer-windows-autohotkey/)\n* [AutoHotkeyでToolTipを出す](https://rcmdnk.com/blog/2017/11/10/computer-windows-autohotkey/)\n* [AutoHotkeyで設定ファイルの読み書きをする](https://rcmdnk.com/blog/2017/11/08/computer-windows-autohotkey/)\n* [AutoHotkeyでのGUI操作](https://rcmdnk.com/blog/2017/11/07/computer-windows-autohotkey/)\n* [AutoHotkeyでのメニューの追加](https://rcmdnk.com/blog/2017/11/06/computer-windows-autohotkey/)\n* [AutoHotkeyで短い連続入力を認識させる方法](https://rcmdnk.com/blog/2017/11/05/computer-windows-autohotkey/)\n* [AutoHotkeyで特定の条件下で設定したキー以外全てを無効にする簡単な方法](https://rcmdnk.com/blog/2017/09/03/computer-windows-autohotkey/)\n* [Vim以外でVimする: Windows+AutoHotkey編](https://rcmdnk.com/blog/2013/08/03/computer-windows-autohotkey/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frcmdnk%2Fvim_ahk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frcmdnk%2Fvim_ahk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frcmdnk%2Fvim_ahk/lists"}