设置Autohotkey的文件/EXE文件以进行VIM仿真。
vim.ahk是autohotkey(autohotkey_l)的设置文件。
vim.exe是由vim.ahk制成的独立应用程序(在版本页面中可用)。
这是Windows的VIM仿真。如果您对Mac的相同设置感兴趣,请尝试使用rcmdnk的karabiner for karabiner -macos:karabiner -element -element -element -elements complex_modifications规则。
此脚本适用于Autohotkey V2。
如果您使用的是Autohotkey V1,请使用版本V0.13.2(或AHK_V1分支)。
如果您已经安装了Autohotkey,则只需使用Autohotkey打开Vim.ahk。
如果您正在使用另一个脚本运行Autohotkey,则可以使用AutoHotkey将其包含在脚本中...请在Users%username%Documents或脚本所在的位置复制vim.ahk和lib Directory,并在Autohotkey.ahk或您的脚本中添加以下行,或您的脚本:
#Include %A_LineFile%..vim.ahk
在自动执行部分的末尾。
您也可以使用vim_ahk.exe ,它可以独立使用a autohotkey。
要获得可执行文件,请转到发布页面并下载最新的zip文件。
解开zip文件,然后将提取的vim_ahk文件夹放置在您喜欢的地方,然后启动vim_ahk.exe 。
笔记
将VIM_AHK_ICONS文件夹放在带有vim_ahk.exe的同一文件夹中,否则,托盘菜单图标功能不起作用。
clone vim_ahk和go vim_ahk文件夹,然后运行build.bat 。
.build.bat在powerShell或命令提示符上。您会找到包含vim_ahk.exe和vim_ahk_icons的vim_ahk文件夹。
默认设置启用以下应用程序的VIM模式:
您可以从任务托盘图标的右键菜单(在列表中找到VimMenu Settings )更改它们,也可以通过Ctrl-Alt-Shift-v启动设置窗口。
如果要直接在脚本中更改应用程序,请在vim.ahk中的Vim := new VimAhk()之前添加VimGroup变量(可以通过autohotkey的窗口间谍检查窗口标题/class),或在包含vim.ahk之前写入。
示例行:
VimGroup := "ahk_exe chrome.exe,ahk_exe firefox.exe"
多个应用程序可以通过逗号分隔写。
笔记
这将覆盖默认应用程序。如果要将这些应用程序添加到默认应用程序中,请在应用程序之后添加以下应用程序:
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
或者,您可以使用下面描述的GUI选项设置菜单。
VimSetTitleMatchMode的默认设置为2,它使匹配方法作为Contain 。
如果设置OneNote ,将包括所有带有包含OneNote标题的窗口(例如XXX's OneNote )。如果将VimSetTitleMatchMode设置为3,则仅包括OneNote的确切标题。
它可能无法使用OneNote。 OneNote可能具有一个窗口名称,例如用户笔记本 - OneNote ,而不是OneNote 。
在这种情况下,您需要使用窗口间谍检查OneNote的窗口标题。
窗口间谍将为您提供有关窗口标题,类和过程的信息:
User's Notebook - OneNote
ahk_class ApplicationFrameWindow
ahk_exe ApplicationFrameHost.exe
如果将上述任何行添加到vimgroup,则VIM_AHK在OneNote上工作。但是,如果您设置ahk_class ApplicationFrameWindow或ahk_exe ApplicationFrameHost.exe ,VIM_AHK还可以在使用这些类/过程名称的其他应用程序上(大多数从Microsoft Store安装的应用程序)上都可以使用。
申请示例:
ahk_exe chrome.exeahk_exe firefox.exeahk_exe EXCEL.EXEahk_exe soffice.bin (对于所有libreoffice应用程序) 除VimGroup外,您还可以在脚本中设置以下选项。所有这些都可以从“设置”菜单更改。
| 选项 | 描述 | 默认 |
|---|---|---|
| vimescnormal | 如果1,则短按ESC设置了正常模式,而长按ESC发送ESC。 | 1 |
| vimsendescnormal | 如果1,则在正常模式下短按ESC发送ESC。 | 0 |
| vimlongescnormal | 如果1,则交换了简短的按压和长期按下。 | 0 |
| vimctrlbrackettoesc | 如果1,则表现为ESC。 如果vimctrlbracketnormal为0,则ctrl- [发送ESC。 如果vimctrlbracketnormal为1,则长按ctrl- [发送ESC。 | 0 |
| vimctrlbracketnormal | 如果1,请按ctrl- [设置正常模式,而长按ctrl- [发送ctrl- [。 | 1 |
| vimsendctrlbracketnormal | 如果1,请按ctrl-- [在正常模式下发送ctrl- [发送ctrl-。 | 0 |
| vimlongctrlbracketnormal | 如果1,则简短按下和长按ctrl- [交换行为。 | 0 |
| vimchangecaretWidth | 如果1,请在操作前检查光标下的字符。当前使用: a处于正常模式下(检查光标是否位于行的末端)。 | 0 |
| vimrestoreime | 如果1,输入插入模式时将恢复IME状态。 | 1 |
| vimjj | 如果1, jj从插入模式将模式更改为正常模式。 | 0 |
| vimtwoletteresc | 在插入模式下以达到正常模式的字符对列表。 例如, jf的值意味着同时按j和f进入正常模式。可以通过 , (例如jf,jk,sd ) | |
| vimdisableunused | 在插入模式以外,禁用未使用键的级别:
| 3 |
| vimsetTitleMatchMode | SETTITLEMATCHMODE:
| 2 |
| vimsetTitleMatchModefs | SETTITLEMATCHMODE:
| 快速地 |
| VimiconCheckInterval | 间隔以检查VIM_AHK状态(MS)和更改托盘图标(请参见下图)。 如果将其设置为0,则设置了原始AHK图标,并且不会更改。 | 1000 |
| vimverbose | 冗长级别:
| 1 |
| vimapplist | 申请列表用法:
| 允许列表 |
| vimgroup | 启用了女巫vim_ahk上的应用程序。 | 请参阅应用程序部分 |
您可以在“自动执行”部分中的脚本中包含vim.ahk之前添加选项:
VimVerbose := 2
#Include pathtovim.ahk
如果要在vim.ahk脚本中直接更改它们,请在Vim := new VimAhk()之前添加这些变量。
笔记
这些VIM变量将覆盖默认值和初始值。检查这些变量后,读取配置文件。如果您已经运行vim_ahk,则创建了配置文件并保存所有设置。要反映新设置,请尝试在GUI选项设置窗口中Reset 。
笔记
VimiconCheckInterval示例
如果将VimiconCheckInterval设置为非零,则将托盘图标更改或更改模式或将应用程序更改为启用VIM_AHK或未启用的应用程序。
警告
vimchangecaretWidth
CARET宽度只能在特定应用程序上更改:WordPad,Word或OneNote。在记事本或探险家上,将保留插入宽度,但不会改变。
对于大多数其他应用程序,将插入宽度保留为原始宽度。
启用此选项后,当模式更改时,当前窗口将短暂失去焦点。
如果启用了此选项并在正常模式下更改Caret宽度厚,并禁用选项,则光标宽度保持厚。要逆转插入的宽度,请重新启用选项并在Wordpad处输入插入模式,或者以恢复插入宽度的内容,然后禁用选项。
您可以从任务托盘图标的右键菜单(在列表中找到VimMenu Settings )更改这些选项,也可以通过Ctrl-Alt-Shift-v启动设置窗口。
在这里,您可以添加应用程序,更改模式更改密钥或更改详细信息。
如果推送Reset ,则将在窗口中显示默认设置。仅在按下OK按钮时,才能启用这些设置。
这些默认设置在上述脚本中被您的VimXXX选项覆盖。 (IE Reset除了VIM_AHK的默认设置外,还将在脚本中还原您的选项。)
| 钥匙 | 功能 |
|---|---|
| Ctrl-Alt-Shift-V | 启动GUI选项设置窗口。 |
| Ctrl-Alt-Shift-S | 暂停/重新启动vim_ahk。 |
| Ctrl-Alt-Shift-C | 显示状态检查窗口。 (仅在vimgroup应用程序上。) |
这是主要模式。
| 模式 | 描述 |
|---|---|
| 插入模式 | 原始Windows状态 |
| 正常模式 | 与VIM一样,光标被hjkl , w等移动,并且可以使用一些类似VIM的命令。 |
| 视觉模式 | 有三种视觉模式:角色,线和块。块视觉模式仅适用于支持块选择的应用程序(例如Terapad)。 |
| 命令模式 | 可用于保存文件/退出。 |
初始状态是插入模式,然后是ESC或Ctrl-[将您带入正常模式。
在正常模式下, i是返回插入模式的关键。
v , V和Ctrl-v分别是角色,线条和块视觉模式的关键。
按下之后:可用一些可以保存/退出的命令。
| 键/命令 | 功能 |
|---|---|
| ESC/ctrl- [ | 输入正常模式。保持(0.5s)这些键模仿正常的ESC/ctrl- [。 |
| JJ | 输入正常模式,如果启用。 |
| 自定义两个字母 | 如果设置了两个字母的映射。 |
ESC/ctrl- [如果IME打开,请关闭IME。 ESC在IME打开并转换说明时充当ESC。 ctrl- [即使IME打开,关闭IME并进入正常模式。
如果VimLongEscNormal (vimlongctrlbracketnormal normal normal normal normal normal normal normal normal normal norkal VimLongCtrlBracketNormal (0),则长按ESC(ctrl- [)将发送这些原始键。
如果启用了VimLongEscNormal ( VimLongCtrlBracketNormal ),则单个按下将发送原始键,而长按下将将模式更改为正常模式。
如果使用自定义的两个字母热键进入正常模式,则两个字母必须不同。
警告
角色只能用于一个两个字母的热键。如果您指定ab和bc , ba (首先推动b ,然后a )不起作用。如果您先推a ,则ab会起作用。
| 键/命令 | 功能 |
|---|---|
| i/i/a/a/o/o | 在行/开始/下线/上线/下行的光标/末端旁边/旁边的“光标/启动”下输入插入模式。 |
| v/v/ctrl-v | 输入角色/线条/块的视觉模式。 |
| : | 输入命令行模式 |
| 键/命令 | 功能 |
|---|---|
| H/J/K/L。 | 左/下/向上/右。 |
| 0/$ | 移至线路的起点/结束。 |
| ctrl-a/ctrl-e | 移至行的起点/结束(Emacs类似)。 |
| ^ | 移至该行的起始非空格字符。 |
| w/w | 移至下一个单词的开头。 |
| E/E。 | 移至单词的结尾。 (实际上,移至下一个单词的开头,向左移动一个字符。) |
| b/b | 移至上一个单词的开头。 |
| ctrl-u/ctrl-d | 上/下10行。 |
| CTRL-B/CTRL-F | Pageup/pagedown。 |
| gg/g | 转到文件的顶部/底部 |
| 空间 | 正确的。 |
| 进入 | 移至下一行的开头。 |
笔记
Enter仅适用于编辑器应用程序(对于Explorer,Q-Dir以外,它即使在正常模式下也可以作为输入)。
此外, Repeat也可用于某些命令。
| 示例命令 | 行动 |
|---|---|
| 4J | 下4行 |
| 3W | 向前移动3个字 |
| 100J | 向下100行 |
| 键/命令 | 功能 |
|---|---|
| 是的,是的 | 复制行。 |
| DD | 切线。 |
| d | 从这里切到线的尽头。 |
| CC | 更改行(输入插入模式)。 |
| c | 从此处切开到行的末端,然后进入插入模式。 |
| X/X | 删除光标下/之前的字符(未在剪贴板中注册)。 |
| p/p | 粘贴到下一个/当前位置。如果通过线条视觉模式完成复制/切割,则将其粘贴到下一行/当前行。一些命令(这样的YY/DD)也强迫粘贴为线条。 |
| yiw/diw/ciw | 复制/剪切/更改当前单词。 |
也可以使用Y/D/C+移动命令。
yw >复制下一个单词。d3w >删除下一个3个单词。| 键/命令 | 功能 |
|---|---|
| u/ctrl-r | 撤消/重做。 |
| r/r | 替换一个字符/多个字符。 |
| j | 结合两条线。 |
| 。 | 它是修复的: Replace the following word with a clipboard (可与搜索一起使用)。 |
| 〜 | 更改案例。 |
| / | 开始搜索(将打开搜索框) |
| N/n | 搜索Next/上一个(某些应用程序仅支持下一个搜索) |
| * | 在光标下搜索单词。 |
| ZZ/ZQ | 保存并退出/退出。 |
| 键/命令 | 功能 |
|---|---|
| ESC/ctrl- [ | 输入正常模式。 |
| 移动命令 | 在正常模式下,大多数移动命令可用。 |
| y/d/x/c | 复制/切割/切割和插入( d = x ) |
| y/d/x/c | 移动到线的末端,然后复制/切割/切割/切割和插入模式( D = X ) |
| IW | 选择当前单词。 |
| * | 搜索选定的单词。 |
| 键/命令 | 功能 |
|---|---|
| ESC/ctrl- [ | 输入正常模式。 |
| W +返回 | 节省 |
| W +空间 | 保存为 |
| W + q | 保存并退出 |
| 问 | 辞职 |
| h | 申请的开放帮助 |
请参阅Ranger,这是带有VI密钥绑定的控制台文件管理器。
| 键/命令 | 功能 |
|---|---|
| H/J/K/L。 | backspace(返回到父目录)/down/up/up/enter(输入选定目录或打开文件) |
| alt+u/i/j/k | 在四向方向之间切换 |
| ' | 菜单快速链接 |
测试通过执行tests/run_vimahk_tests.ahk运行。打开了记事本和VIM窗口,并启动了VIM_AHK。
所使用的测试系统是tests/testcases.txt中的一系列测试用例。TXT代表要发送到VIM_AHK的击键。这些已发送到开放的VIM和记事本窗口,并比较结果文本。
测试可能非常薄弱,因此应用作指南并执行代码路径以检查错误。测试应使用默认INI进行。