作为走在时代最前沿的程序员,电脑必须玩的溜。要想电脑玩的溜,首先快捷键必须用的熟练。一般我们用快捷键最多的地方就是IDE,高效的写代码的时候是绝对离不开各种快捷键的。可以说,快捷键在很大程度上减少了我们很多繁琐的工作。
很多软件都自带了各种各样的快捷键,并允许用户修改快捷键。window作为一个成熟的系统,也提供了众多快捷键,比如win+E快速打开我的电脑,win+R快速打开命令行,win+L锁定屏幕等等。但是我们发现,win的快捷键还是不能解决一些我们想要的操作。比如想打开位置比较深的某个文件夹(需要逐渐打开好几层目录),想要快速最小化当前窗口,想要快速打开某个应用(而不是跑到桌面点击应用图标启动),或者在众多打开的程序中快速打开某个程序等等。
autohotkey可以说就是为了解决这些问题而诞生的。
安装 Autohotkey
从autohotkey官网下载 安装包。双击安装。安装过程很简单,一直点下一步就好了(放心,不会给你什么全家桶)。安装好后就可以关闭安装窗口。就可以开搞了。
设置快捷键
随便找个目录,鼠标右键新建一个autohotkey的脚本。
映射一个动作——最小化当前窗口
文件名随便叫,创建好脚本后用编辑器打开这个脚本。然后我们就可以开始写autohotkey的代码。输入以下代码:
#w:: ;;这里的 #->表示window键 w->表示字母w键
WinMinimize,A ;;最小化当前窗口
return ;;结束代码段
写完后我们保存,然后双击该脚本,脚本就开始运行了。这时我们同时按下win+w键,当前正在活动的窗口就会最小化了。
映射一个键——上左下右
经常打字的人都知道,我们编辑文本时要上下左右移动光标,难免要将手移到方向键再移回来打字。对我这样的懒癌后期患者,这简直不能忍。所以我们通过autohotkey将上下左右键映射成其他键。下面是代码:
!k:: ;; !->alt键 k->字母键k
Send {Up} ;;输入 上 键
return
!j::
Send {Down}
return
!h::
Send {Left}
return
!l::
Send {Right}
return
我将它们映射成了 alt+h,j,k,l (符合vim风格,读者可以设置成jkli,可能更容易适应)。这样我们在编辑文本时想移动光标直接左手按alt键,右手hjkl就可以移动光标了。是不是很方便?
映射一组键盘操作——删除复制粘贴一整行
很多IDE都有快速删除一行,复制一行的快捷键。我们通过aotohotkey也能实现
;;;;;;;;;;;;;删除一整行
!d:: ;alt+d
Send {Home} ;输出回车
Send +{End} ;输入shitf键+end键
Send {delete} ;输入delete键
return
;;;;;;;;;;;;;复制一整行
!y::
send {home}
send +{end}
send ^c ;输出ctrl+c,复制一整行
return
;;;;;;;;;;;;;另起一行粘贴内容
!p::
send {end}
send {enter}
send %clipboard% ;将剪贴板的内容输出
return
因为autohotkey设置的是windows全局快捷键。这样,我们在任何编辑器都可以使用这些快捷键了,使用alt+d删除一行,alt+y复制一行,alt+p粘贴内容。(但是要注意别把软件自带的快捷键给覆盖了)。
打开某软件或者某网页
我们工作中经常要打开某软件或者某网站,又或者搜索某个东西。通过autohotkey我们可以非常快速的做到这一切。
;;; 选中关键字后,同时按下win+b,打开百度搜索
#b:: ;win+b
Send ^c ;输入 ctrl+c
sleep,100 ; 等待100毫秒
run https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=92765401_hao_pg&wd=%clipboard%
;根据选中的内容打开百度搜索
return
;;; 判断xshell进程是否启动,启动的话快速激活(窗口最大化)xshell,否则启动xshell
!+s:: ;; alt+shift+s
ifWinExist,ahk_class Xshell::MainFrame_0 ;;;判断xshell 进程是否启动
winActivate ;;; 激活窗口
else
run E:\xshell\Xshell.exe ;;; 运行xshell软件
return
这样我们想百度某个关键字的时候,直接选中这个关键字,然后同时按下win+b。系统就会通过默认浏览器打开百度页面(url已经携带了刚才那个关键字了)。
上面的第二段代码实现了快速打开某个应用的功能,我们就不用去管它是否已经启动了,因为这些autohotkey已经帮我们判断了。
如果你不知道应用的 ahk_class ,也可以设置一个快捷键获取应用的ahk_class。
#g::
WinGetClass, title,A
msgbox,%title%
clipboard=%title%
return
各个键的映射关系
下面列出一些特殊键的映射关系,更多的请参考官方文档:
符号 说明
# window键
! alt键
^ ctrl键
+ shift键
< 有两个相同键时,表示左边那个键.比如alt有左右两个键,
> 表示相同键中右边的那个键
LButton 鼠标左键
RButton 鼠标右键
MButton 鼠标中间键
WheelDown 滚轮向下
WheelUp 滚轮向上
Backspace 退格键
CapsLock 大小写切换键
Escape 退出键
设置字符串映射
简单映射
我们可能有时会有这样一个场景,经常要输出一串长字符串,而且都是一样的。但是每次都输入也会觉得麻烦,有时甚至可能输错。autohotkey 提供了一种类似字符串映射的功能, 能够让我们去掉这些重复工作。
::hello:: ;;和快捷键不同,前面加两个冒号 '::' 说明这是个字符串映射
send hello world ;;会变成改成输入hello world
return
;;; 这段代码实现
::pwd::
send yangjb{tab}123456
return
运行这个脚本后,你会发现你输入的hello会全部被autohotkey替换成 hello world。
后面一段代码实现了在网页登录框,输出pwd的时候,自动填写用户密码的功能。({tab}用于换行)。建议做字符串映射的时候前面带一个或两个反斜杠’/’,这样就不会在平常输入文本的时候自动被映射走了。
通过字符串映射运行程序
凡是设置快捷能做的,字符串映射也一样能做。比如我们设置一个输出 /e就打开e盘的功能。
::/e::
run e: ;;打开e盘
return
这样,我们在任何地方输入/e,都会打开e盘了。当然,你也可以打开某个具体的软件,或者打开某个网站。
通过窗口输入命令
有时觉得快捷键太多了记不住,输入字符串又要特地去找个编辑的地方输入,都有各自的缺点。这时,我们就可以使用autohotkey自带的界面来优化我们的体验了。通过autohotkey弹出窗口,我们输入自定义的指令,快速实现我们想要的功能。autohotkey唤出一个输出窗口很简单,只要一句话就搞定: inputBox,fieldName,boxName。fieldName是用于接受用户输入的字符串,boxName是窗口名。下面直接上一个代码示范:
tmp_path=f:\tmp ;;; autohotkey 可以事先定义一些变量
idea_path=E:\IntelliJ IDEA 2017.1.2\bin\idea64.exe
!c::
inputBox,command,enter command
if ErrorLevel
return
else
if (command=="tmp")
run %tmp_path% ;;;打开指定文件夹 用两个百分号%%包围说明这是一个变量
else if (command=="baidu")
run http://www.baidu.com ;;; 快速打开百度
else if (command=="c" || command=="d" || command=="e" || command=="f")
run %command%:/ ;;快速打开这些盘
else if (command=="idea")
run %idea_path% ;;快速打开idea
return
上面的代码,我们自定义了4个操作。当我们按下快捷键alt+c来唤出输入框。输入tmp的时候,会打开f:\tmp 目录。输入baidu的时候,会打开百度。输入c d e f的时候,会打开对应的盘符。最后,输入idea的时候,会打开idea程序。
autohotkey输入框:
这样,我们可以将任何字符串对应到具体的操作中去。
在具体的某个软件中设置快捷键
有的时候,我们不想在window全局设置快捷键,只想在某个程序中设置快捷键。autohotkey
也可以满足你的要求。
#IfWinActive ahk_class Chrome_WidgetWin_1
;; 下面的语句块只在chrome中生效
!n::Send ^t
!x::Send ^w
!,::Send ^+{Tab}
!.::Send ^{Tab}
!z::Send ^+t
!+h::send ^h
return
上面的代码实现只在chrome浏览器设置快捷键的作用。通过 #IfWinActive ahk_class Xshell::MainFrame_0 判断当前活动的是否是chrome进程,来激活快捷键设置。进程的ahk_class如何获取上文中已经说过。
平常我们要左右移动chrome标签,chrome虽然提供了ctrl+tab或者ctrl+shift+tab,但是相当别扭。我们用autohotkey将它映射成alt+,键和alt+.键。就可以很方便的实现标签的切换了。alt+n可以快速的新建标签,alt+x快速关闭一个标签。
快速获取鼠标位置处的颜色取值
!+c::
MouseGetPos, mouseX, mouseY
; 获得鼠标所在坐标,把鼠标的 X 坐标赋值给变量 mouseX ,同理 mouseY
PixelGetColor, color, %mouseX%, %mouseY%, RGB
; 调用 PixelGetColor 函数,获得鼠标所在坐标的 RGB 值,并赋值给 color
StringRight color,color,6
; 截取 color(第二个 color)右边的6个字符,因为获得的值是这样的:#RRGGBB,一般我们只需要 RRGGBB 部分。把截取到的值再赋给 color(第一个 color)。
clipboard = %color%
; 把 color 的值发送到剪贴板
return