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

同样有这种需求,之前用clipstudio画画,使用快捷键总是忘了要切到英文输入法,而且有时候忘了目前的输入法是中文还是英文,需要分心去看,挺影响使用体验的。

後来我養成了一個習慣,在打字前迅速瞄一眼輸入法狀態…

1 个赞

如果一個軟體需要一直更新才能適配新版系統,那只能說明新系統沒做好向前兼容。至少本人在win10上的各種地方打字都沒有問題,win11寡人沒有試過。

1 个赞

我觉得快捷键冲突这个问题还是应该由输入法背锅。
针对软件快捷键冲突的场景,如果输入法打字时,侦测一下是否在编辑文本框,就可以避免这个问题了。
但是我对Windows编程了解有限,不太确认怎么做,

1 个赞

我没有遇到这个问题 :stuck_out_tongue: 因为:
①配置输入法 「 中文状态下使用英文标点 」
②使用 MyKeymap 的符号输入、分号缩写

3 个赞

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

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

1 个赞

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

1 个赞

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

印象中,開始搜索框是metro,這個是比較難支持的,好像gcin一直就不支持。

但是你打開一個文本編輯器,或者其它地方,應該是沒有問題的。

1 个赞

感觉这个方案很牛逼啊,冒号这种需要按住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
7 个赞

方便

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

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

2 个赞

在主站的讨论中,非常认同以下两人看法,所以试着用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会造成干扰。

3 个赞

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

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

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

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

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

1 个赞

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

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

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

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

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

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

1 个赞