求Windows端能舒服地输入英文符号的办法

「 中文状态下使用英文标点 」+Quicker动作的中英符号转换,这个确实不错

软件做得很好,在B站看见了,打算尝试一下

在用的小鹤音形输入法是利用引号键进行引导的:按一下引号键,然后输入符号,回车上屏。或许可以借助这种思想。

試了一下,在Win11開始搜索框打不了字,macOS一直都不管向前兼容卻人人稱贊。

感觉这个方案很牛逼啊,冒号这种需要按住shift切换的大佬可以做一个吗

把所有中文符号做了下长按映射~

共计18种:
,。!《》——?;“”:「」()……、【】⇒•·~
逗号\句号\叹号\书名\破折\问号\分号\引号\冒号\直角引号\圆括号\省略号\顿号\方头括号\箭头⇒\用于列表的项目符号•\用于人名的间隔号·\中文波浪~

输入方法详见代码注释,除了破折和省略号,其他标点都是完全符合直觉的。

用的是autohotkey_L,即支持unicode版,代码如下:

;长按".>"输入中文句号。
$.::
	KeyWait, .
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp, -1
	Else
		SendInput,.
Return

mainp:
	SendInput,。
Return

;长按",<"输入中文逗号,
$,::
	KeyWait,SC033
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp2, -1
	Else
		SendInput,,
Return

mainp2:
	SendInput,{raw},
Return

;长按"/?"输入中文感叹号!(/和!差不多)
$/::
	KeyWait,/
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp3, -1
	Else
		SendInput,/
Return

mainp3:
	SendInput,{raw}!
Return

;长按"shift" + ",<" 输入中文书名号并光标其中
$<::
	KeyWait,<
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp4, -1
	Else
		SendInput,<
Return

mainp4:
	SendInput,{raw}《》
	SendInput,{left}
Return

;长按"shift" + ".>" 输入中文破折号(>掰直了不就是——嘛)
$>::
	KeyWait,>
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp5, -1
	Else
		SendInput,>
Return

mainp5:
	SendInput,{raw}——
Return

;长按"shift" + "/?" 输入中文问号?
$?::
	KeyWait,?
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp6, -1
	Else
		SendInput,?
Return

mainp6:
	SendInput,{raw}?
Return

;长按";:" 输入中文分号;
$;::
	KeyWait,;
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp7, -1
	Else
		SendInput,;
Return

mainp7:
	SendInput,{raw};
Return

;长按"shift" + ";:" 输入中文冒号:
$+;::
	KeyWait,:
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp8, -1
	Else
		SendInput,:
Return

mainp8:
	SendInput,{raw}:
Return

;长按"'"" 输入中文双引号并光标置中
$'::
	KeyWait,'
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp9, -1
	Else
		SendInput,'
Return

mainp9:
	SendInput,{raw}“”
	send,{left}
Return

;长按"shift" + "'"" 输入直角引号「」并光标置中
$+'::
	KeyWait,"
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp10, -1
	Else
		SendInput,{raw}"
Return

mainp10:
	SendInput,{raw}「」
	send,{left}
Return

;长按"[{" 输入中文圆括号()并光标置中
$[::
	KeyWait,[
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp11, -1
	Else
		SendInput,[
Return

mainp11:
	SendInput,{raw}()
	send,{left}
Return

;长按"shift" + "[{" 输入方头括号【】并光标置中
${::
	KeyWait,{
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp12, -1
	Else
		SendInput,{raw}{
Return

mainp12:
	SendInput,{raw}【】
	send,{left}
Return

;长按"]}" 输入中文省略号……
$]::
	KeyWait,]
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp13, -1
	Else
		SendInput,]
Return

mainp13:
	SendInput,{raw}……
Return

;长按"shift" + "]}" 输入⇒(}压扁了不就是⇒)
$}::
	KeyWait,}
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp14, -1
	Else
		SendInput,{raw}}
Return

mainp14:
	SendInput,{raw}⇒
Return

;长按"\|" 输入中文顿号、
$\::
	KeyWait,sc02B
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp15, -1
	Else
		SendInput,\
Return

mainp15:
	SendInput,{raw}、
Return

;长按"`~" 输入中文间隔号· 例如爱新觉罗·玄烨
$`::
	KeyWait,sc029
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp16, -1
	Else
		SendInput,{sc029}
Return

mainp16:
	SendInput,{raw}·
Return

;长按"shift" + "`~" 输入中文波浪~(有的字体下中英~长一样)
$~::
	KeyWait,~
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp17, -1
	Else
		SendInput,~
Return

mainp17:
	SendInput,{raw}~
Return


;长按"shift" + "\|" 输入项目符号• 用于列表的开头
$|::
	KeyWait,|
	If (A_TimeSinceThisHotkey > 300)
		SetTimer, mainp18, -1
	Else
		SendInput,|
Return

mainp18:
	SendInput,{raw}•
Return

方便

是不是英文状态,长按输入中文符号,中文状态输入英文符号,完美了

不是:grin:
是用在 中文输入+英文符号情况下,长按输入中文符号的

在主站的讨论中,非常认同以下两人看法,所以试着用ahk写了段代码,实现了一键转错输的拼音或符号为中文的。

用的是appskey,没有这个键的建议换成右ctrl。
使用效果见图,用起来还是非常爽的瞬间完成,而且appskey就在右ctrl边上,盲摸过去就很准确舒服了。

测试

可以看到不止Pinyin,逗号句号等英文符号也适用……

代码如下:

AppsKey::
    send , +{Home}
    sleep, 20
    send, ^c
    send,{shift}
    ;通过shift切换中文,可自行修改
    if (StrLen(Clipboard)) < 20
{
    sendinput,%Clipboard%
}
else
{
    Clipboard1 := SubStr(Clipboard, 1, -20)
    Clipboard2 := SubStr(Clipboard, -19)
    sendinput,{Text}%Clipboard1%
    sendinput,%Clipboard2%
}
return

注意:设置了有效范围是20,也就是光标前20个字符或汉字。尽可能避免出现这种情况:
「今天是个sunday,我爱晒taiyang」
这时前面的sunday会造成干扰。

长按符合触屏的直觉,但是不符合物理按键的直觉。

我倒是受启发感觉 caps+符号可能会好些。

那样对于有些符号,就得caps + shift + 符号了,很费劲。

我感觉两种结合起来比较好用,对于冷门符号比如问号,叹号,省略号等,长按输入很舒服,shift +符号长按也并不累;对于逗号,句号等热门符号,caps+之类的双键映射比较舒服。

我现在就是这样结合起来用的。

发现用微软输入法输入当前的时间和日期,经常会出现问题,懒得深究,索性把一部分动态的自定义短语放到了键盘的快捷键上。

用 AHK 写了一个辅助的工具,给垃圾键盘加了两个编程层,一层按键映射一层快捷短语。

长按的问题不是累不累, 而是不符合直觉, 键盘按键是按住后, 字符会连续出现. 如果一部分按键长按是中文符号, 另外一部分按键长按是连续字符. 就会产生人机工程的割裂感.

只能依靠用户个人的记忆和习惯的改变. 这样就很难普及. 只适合个别人.

可能吧。
我没有长按输入连续字符的习惯,甚至从来没有这样操作过,需要连续输入都是连续多次点击,所以对我来说没有什么问题。

输入完一段中文之后, 立马还原成英文, 这样做有什么问题?

关于长按的习惯,其实我也,除了打游戏时候会长按,平时好像没有长按输入的习惯
归根结底可能是因为长按输入是不可靠的,长按输入根本不知道会输入多少次,多输入的内容还要按退格删除(哦对,退格和del可能会长按,不过我一般都是多次敲击的,真遇到大片成段的内容不都是用鼠标或者shift+方向键/HomeEndPuPd先选好的吗()
我感觉长按输入确实是非常棒的想法,安卓端常见的几大输入法早就支持长按/上滑增强输入体验了,何不把这一功能在win上尝试实现呢,感觉会非常有意思,当然可能也会遇到很多难题就是了哈哈哈(比如啥啥又冲突了之类的XD)
(说实在话,我真的是受够中英文反复切换的折磨了,第一个折磨是切换中英——默认用shift键切换是谁想出来的,他不用shift组合输入其它标点符号或者大写字母的吗,一个不小心就误操作了——不过这个问题很快就用ctrl切换解决了,就是临时操作别人的电脑的时候很难受就是了
第二个折磨是中英标点输入,我有时候会把输入法设为中文下默认输入英文标点,但时不时又要用ctrl+.反复切换这个功能开关,属实是自己折磨自己了。看看有没有大佬能提出什么解决方案好了()

①shift 键中英文切换, 因为中英文切换频繁, 这样设计没什么不合理
②为什么要来回切中英文标点, 我这段话的逗号全都是英文逗号

我也觉得没什么不合理,但不代表合理的方法只有这一个。

每个人的习惯和需求不同。打字的场景也不同。甚至不一定是在打字方面需要切换。

比如,我自己有“强迫症”,中文句子用中文符号,英文句子用英文符号。
比如,我给我自己定了规矩,我写的中文句子,如果要给别人看,就必须用中文标点。
比如,我使用LaTeX或Markdown感觉频繁使用Shift好烦,我就是不想用Shift了,想Geek
比如,我的显示器比较小,我喜欢界面整洁,不想让一个大大的输入法状态框放在屏幕里。
比如,我不想把时时刻刻查看输入法状态放入我的工作流之中。
比如,一些软件的快捷键会被中文输入法挡住,而我设置了默认输入法是中文。

大佬,这个软件你确定可以吗? 可是我长按英文,出来的还是英文,啊…

qq 输入法可以定义中文状态下 将【】 替换成 ,当其他的特殊符号也可以定义替换成英文符号。

您好,这个SC003是不是代表逗号?我查了半天也没弄明白是怎么回事,求教.