怎样让两个中文冒号,变成两个英文冒号?

需求

中文输入法下,连续输入两个冒号,自动变成英文的俩冒号,且输入法状态继续是中文

尝试

试过这样写,有效,但有副作用:

:*?Z:::::
        sendL("::")
        KeyWait, Shift
        SendInput, {Shift}
        return

副作用如图:

还试过这样写(代码见二楼),也有效,但副作用更大

请教:有没不干扰其它按键的解决方案?

RShift up::    ;函数lastNKey(n)返回keyhistory中最近n次击键记录
    if ( lastNKey(5)[1] = ";" && lastNKey(5)[2] = ";" && lastNKey(5)[3] = ";" && lastNKey(5)[4] = ";" )
    {
        SendInput, {BS}{BS}
        sendL("::")
    }
    return

论坛markdown解析有问题,两段代码段之间正文的图片,会不显示。所以只能放二楼

副作用是什么?看了半天没看出来。。。像我用capslock+就直接用替换法,单中文冒号换成双英文冒号

~+;::
If (A_PriorHotkey = "~+;" and A_TimeSincePriorHotkey < 500 and flag = true){
  SendInput, {BS 2}{asc 58}{asc 58}
  SendInput, {Shift}
  flag := false
} else {
  flag := true
}
return

注1:支持 Shift+; x2 和 Shift+;+;
注2:默认双击间隔500ms,根据自己平常手速调整吧。
注3:AHK不知搞什么鬼,Shift键一按久,松开后就会切换中英文输入法
所以加了个 SendInput, {Shift}切回来,如果你手速够快的话可以去掉这行。
我试了下,双击间隔差不多100ms以内就可以删这行了:joy:

1 个赞

如果实在word中,可以使用word自带的“自动更正选项”

textexpander 是一种自动替换缩写字符的工具,支持多个平台。你可以试试。

输入法设置为半角模式就可以输入,在搜狗输入法设置里面有个中文模式使用英文标点。
QQ输入法什么的没装,但是应该也有的

图片中,键盘敲的是1 shift+; 1,正确输入应该是1:1,但你看,图中实际输入的是1::,等于不该触发脚本的时候,误触发了

二楼代码的副作用是,所有按住shift再按其它键的,都会失效,要重新写代码映射,副作用也太大

capslock+第一次听说,搜了下,我不动capslock,只用它实现顶楼的需求,它可以做到吗?

CapsLock+用的是11164提的替换法,和劫持按键做法不太一样,理论上不太会有什么副作用,因为毕竟是办自动化的,而且还为写代码的英文的符号匹配做了优化。也实现了allor提的长按CapsLock视作犹豫并直接忽略按键的概念,但没研究过是如何实现的。总之我目前用下来挺好用的,可以完全实现字符替换的功能。

其实按照CapsLock+的做法,你可以设定成按CapsLock+:变成::,这样更方便并且代码就一行也不会有冲突。

如果是新系统,好办

但我的开机自启ahk脚本,就有2000多行,capslock上现在就绑定了各种功能(实际上还用注册表在系统层面把capslock硬替换掉了,所以理论上我的键盘没capslock键,不知道键盘钩子等能不能绕过系统层面的硬替换)……总之牵一发而动全身,谢谢兄弟啦~

从来没用过A_PriorHotkey,一直往A_PriorKey那边去思考了

这么写逻辑也简单多了!涨姿势!谢谢@allor 兄弟!

硬替换了应该就没办法了,你需要方法重构+买一个可以切换CapsLock和ctrl等键的机械键盘,甚至是完全客制化的键盘,很多时候需要简化问题