用 gVim 编辑任意窗口的文字[AHK]

感谢 Smy20011 的投稿。如果你是第一次接触 AHK 从这里开始看

gVim 作为文本编辑的利器,为很多人所喜爱。FireFox 有个 vimperator 扩展(或者 It’s All Text! ),可以调用外部编辑器(如 gVim)来编辑文字,修改保存之后,自动还原到 Firefox 的输入框里。但是,它仅可以在浏览器内使用,对于浏览器外的文本框,就无能为力了。@appinn

所以,Smy20011 用了一个小时,做了一个 AHK 脚本供大家使用。运行此脚本之后,对任何文本框,按下 Ctrl + I(想用其他热键请直接修改脚本)就可以调用 gVim 编辑文本。@sfufoet 我加了注释,代码如下

^i::
    tmpfile=%A_ScriptDir%\ahk_text_edit_in_vim.txt
        ; 定义临时文件的路径为当前脚本所在的文件夹
    gvim=P:\Vim\vim72\gvim.exe
        ; 定义 gVim 路径
    WinGetTitle, active_title, A
        ; 获取当前窗口标题,赋值给 active_title
    ControlGetFocus, name, %active_title%
        ; 获取当前窗口光标所在的控件名
    if ErroeLevel
    {
        msgbox, “获取焦点错误”
    }
    else
    {
        ; 成功获取焦点
        ControlGetText, text, %name%, %active_title%
            ; 获取文字,赋值给 text
        FileDelete, %tmpfile%
            ; 删除临时文件
        FileAppend, %text%, %tmpfile%
            ; 把文字写入临时文件
        runwait, %gvim% "%tmpfile%" +
            ; 运行 vim,直到你保存文件并关闭 vim,下面的代码才会执行
        fileread, text, %tmpfile%
            ; 读取临时文件
        ControlSetText, %name%, %text%,%active_title%
            ; 把读取的文字还原到刚才获取文字的窗口
        ControlFocus, %name%, %active_title%
            ; 并把光标定位到结尾
    }
return

Smy20011 写的这个脚本对于 Firefox 之类的程序就无效了。所以我利用剪贴板,写了一个通用的。update: 善用佳软提醒,gVim 官方 wiki 也有一样的方法,代码比这个简洁。

^i::
    tmpfile=%A_ScriptDir%\ahk_text_edit_in_vim.txt
    gvim=P:\Vim\vim72\gvim.exe
    WinGetTitle, active_title, A
    clipboard =
        ; 清空剪贴板
    send ^a
        ; 发送 Ctrl + A 选中全部文字
    send ^c
        ; 发送 Ctrl + C 复制
    clipwait
        ; 等待数据进入剪贴板
    FileDelete, %tmpfile%
    FileAppend, %clipboard%, %tmpfile%
    runwait, %gvim% "%tmpfile%" +
    fileread, text, %tmpfile%
    clipboard:=text
        ; 还原读取的数据到剪贴板
    winwait %active_title%
        ; 等待刚才获取文字的窗口激活
    send ^v
        ; 发送 Ctrl + V 粘贴
return

update:asj 稍稍改进了一点:判断文件类型,让 gVim 能自动高亮。
在 WinGetTitle, active_title, A 这句后面增加

;判断文件类型
filetype=%active_title%
IfInString, active_title, SQL 查询分析器
filetype=sql

根据窗口名称改变临时文件后缀名,这样vim修改的时候就可以自动变为相应高亮格式了。后面需要稍作修改:

FileDelete, %tmpfile%.*
tmpfile=%tmpfile%.%filetype%

需要增加新的格式就加一句 IfInString,修改后面窗口名和文件后缀即可。

下载地址:(1.1 KB): Everbox | 来自小众软件

P.S.1 上次小众发了一个 Vim 键盘图中文版这里有一个英文分解版的,方便 Vim 新手。善用佳软也有 AHK + gVim 教程 vtano.ahk:GVIM + AHK 实现顶层透明笔记本

P.S.2 最近一直在酝酿新的 AHK 教程,一个关于 GUI 界面的例子——用 Power 键来关闭或重启 Win7,需要以连载的形式出现(2~3 篇),支持的话过来冒个泡吧。

36 条留言

  1. 君临天下 2010/03/15 回复
  2. WANGJIARONG 2010/03/15 回复
  3. 2010/03/15 回复
  4. cstr 2010/03/16 回复
    • 善用佳软 2010/03/16 回复
      • sfufoet 2010/03/16 回复
  5. 善用佳软 2010/03/16 回复
    • sfufoet 2010/03/16 回复
      • tc 2010/03/16 回复
      • tc 2010/03/16 回复
  6. skystar 2010/03/16 回复
    • sfufoet 2010/03/16 回复
      • skystar 2010/03/16 回复
  7. murmur 2010/03/16 回复
  8. steve 2010/03/16 回复
    • sfufoet 2010/03/16 回复
  9. sqybi 2010/03/16 回复
  10. theflash 2010/03/16 回复
  11. kiss 2010/03/16 回复
  12. theflash 2010/03/16 回复
    • steve 2010/03/16 回复
      • sfufoet 2010/03/16 回复
  13. hugging 2010/03/16 回复
    • sfufoet 2010/03/16 回复
  14. theflash 2010/03/16 回复
  15. asj 2010/03/17 回复
  16. Susie 2010/05/22 回复
  17. 2011/07/18 回复
    • sfufoet 2011/07/19 回复
  18. 桔子 2011/10/31 回复
    • sfufoet 2011/11/06 回复
  19. Bin 2013/09/01 回复
  20. chenwei 2016/12/04 回复
  21. chenwei 2016/12/04 回复

写留言