AHK系列:
注 本文使用的是V2版本的语法
进入环境和调库
一般来说,在命令行中启用Python,通常需要进入conda环境,而使用最多的则是基础环境,即conda activate命令。在进入conda环境之后,便可输入Python,进入交互编程界面了。
而进入python之后,最常用的命令则是导入numpy以及matplotlib.pyplot这两个模块。
故而通过下面两个替代,分别用cpy和imn完成这两个需求。
#HotIf WinActive("ahk_class CASCADIA_HOSTING_WINDOW_CLASS")
::cpy:: conda activate `n python
#HotIf WinActive("ahk_class CASCADIA_HOSTING_WINDOW_CLASS")
::imn::import numpy as np`nimport matplotlib.pyplot as plt`n
上面是V2的语法,如果使用V1,则HotIf可用IfWinActivate代替,即
#IfWinActive ahk_class CASCADIA_HOSTING_WINDOW_CLASS
除了在命令行中使用Python,Jupyter notebook也是常见的用于快速验证的Python IDE,而在命令行中进入notebook环境,也同样需要先开启conda。在进入notebook环境后,活动窗口也从命令行变成浏览器,故而添加如下内容。
#HotIf WinActive("ahk_class CASCADIA_HOSTING_WINDOW_CLASS")
::cju:: conda activate `n jupyter notebook
#HotIf WinActive("ahk_class Chrome_WidgetWin_1")
::imn::import numpy as np`nimport matplotlib.pyplot as plt`n
绘图定制
在Python中,用matplotlib绘图时,会经常定制一些重复的设置,比如添加网格、紧凑布局等,以下列代码为例。
import numpy as np
import matplotlib.pyplot as plt
xs = np.random.rand(100)
plt.plot(xs)
plt.grid()
plt.tight_layout()
plt.show()
其中grid用于添加网格;tight_layout用于紧凑布局;show用于展示图像,绘图结果如下。
由于plt.grid, plt.tight_layout基本在每次绘图时都需要进行调用,故而可以用autohotkey对其映射
#HotIf WinActive("ahk_class CASCADIA_HOSTING_WINDOW_CLASS")
::adplt::plt.grid() `nplt.tight_layout() `nplt.show() `n
adplt
即advanced plt,表示“高级”绘图。
复制代码
在Python的交互式命令行中,除了输入的命令之外,还往往有输出。而在交流代码时,一般只需要复制输入的内容即可,AHK可以做到这一点。
由于在交互式命令行中,Python命令都是以>>>
或者...
开头的,故而可以复制剪贴板后,提取出以这两种符号开头的行,然后删除这两种符号。
#HotIf WinActive("ahk_class CASCADIA_HOSTING_WINDOW_CLASS")
!C::{
send "^c"
sleep 200
c := ""
loop parse A_Clipboard, "`n"{
if(inStr(A_LoopField, ">>> ") == 1)
c := c strReplace(A_LoopField, ">>> ")
if(inStr(A_LoopField, "... ") == 1)
c := c strReplace(A_LoopField, "... ")
}
A_Clipboard := c
return
}
其基本逻辑是,发送Ctrl+C,将选中文字发送给剪贴板。然后复制剪贴板内容,并通过loop parse对其进行按行遍历,如果该行中存在>>>
或者...
,则将其删除后添加到新的字符串中。最后,再将新的字符串赋值给剪贴板。
这里面需要注意的是,必须在发送Ctrl+C之后进行延时,否则可能在调用循环时,剪贴板的内容并没有更新。
效果如下