代码如下:
class TextEdit {
/**
* 判断文本每一个首行是否是以 "- "开头
* @param text 输入文本
* @returns {boolean}
*/
static IsEveryLineStartWithDash(text) {
; 使用 StrSplit 将文本按行分割
lines := StrSplit(text, "`n")
for line in lines {
; 检查每一行是否以 "- " 开头
if (InStr(line, "- ", 1) != 1) {
return false
}
}
return true
}
/**
* 判断文本每一个首行是否是以数字序号开头
* @param text 输入文本
* @returns {boolean}
*/
static IsEveryLineStartWithNum(text) {
; 使用 StrSplit 将文本按行分割
lines := StrSplit(text, "`n", "`r")
for line in lines {
; 检查每一行是否以 "- " 开头
if (!RegExMatch(line, "^\d+\.")) {
return false
}
}
return true
}
/**
* 得到选中的文字
* @returns {[String, String]}
* 1. 备份的剪贴板内容
* 2. 选中的文字
*/
static GetSelectedText() {
clip_saved := A_Clipboard
A_Clipboard := ""
Send("^c")
ClipWait(0.05)
clipText := A_Clipboard
return [clip_saved, clipText]
}
/**
* 得到选中文字所在行的所有内容
* @returns {String}
*/
static getLineOfSelectedText() {
Send("+{Home}")
HomeSelectedText := TextEdit.GetSelectedText()[2]
; OutputDebug(HomeSelectedText)
Send("+{End}")
EndSelectedText := TextEdit.GetSelectedText()[2]
; OutputDebug(EndSelectedText)
if (StrLen(HomeSelectedText) > StrLen(EndSelectedText)) {
Send("+{Home}")
text := TextEdit.GetSelectedText()[2]
Send("{BackSpace}")
Send("+{End}")
text := text . TextEdit.GetSelectedText()[2]
} else {
Send("+{End}")
text := TextEdit.GetSelectedText()[2]
Send("{BackSpace}")
Send("+{Home}")
text := TextEdit.GetSelectedText()[2] . text
}
return text
}
}
!-:: {
text := TextEdit.getLineOfSelectedText()
; 检查是否是每行开头都添加了 "- ", 如果是,则删除 "- "
bool := TextEdit.IsEveryLineStartWithDash(text)
if (bool) {
text := RegExReplace(text, "m)- ", "")
A_Clipboard := text
Send("^v")
return
}
A_Clipboard := RegExReplace(text, "m)^", "- ")
Send("^v")
}
!=:: {
text := TextEdit.getLineOfSelectedText()
; 检查是否是每行开头都添加了数字序号., 如果是,则删除
bool := TextEdit.IsEveryLineStartWithNum(text)
if (bool) {
text := RegExReplace(text, "m)\d+. ", "")
A_Clipboard := text
Send("^v")
return
}
; 将每行的开头添加 "数字 "
num := 1
modifiedText := ""
for line in StrSplit(text, "`n", "`r")
{
modifiedText .= num . ". " . line . "`r`n"
num++
}
; 删除末尾的换行符
modifiedText := RTrim(modifiedText, "`r`n")
A_Clipboard := modifiedText
Send("^v")
}
展示效果:

欢迎提出优化建议
注意事项
如果使用过程中, 出现了按键粘滞的现象, 可以参考此文章解决: https://zhuanlan.zhihu.com/p/666348622