[AHK]markdown的自动编号功能

【需求】

比如:

1.条目一
2.条目二
然后 Alt+Enter自动输出下一个序号3.

【初稿1】

!Enter::
{
    send {Home}+{End}^c{End}{Enter}
    v:=getClipboard()
    arr:=StrSplit(v, ".")
    if (isNumber(arr[1])=1)
    {
        v:=arr[1]+1
        SendInput, %v%.
    }
}
return

getClipboard()
{
    return %Clipboard%
}

isNumber(str)
{
	return str+1=""?str:1
}

【效果】

【备注】

在QQ里用的话,需要修改发送消息热键为ctrl+enter:

方法一

方法二

【升级1】

功能能否进一步加强
针对1、顿号也适用?
 

!Enter::
{
    send {Home}+{End}^c{End}{Enter}
    v:=getClipboard()
    arr:=StrSplit(v, [A_Tab, A_Space,".","、"])
        ; 计算在这个字段末尾分隔符的位置.
    Position:= StrLen(arr[1])+1  ;已经切开的位置
    ; 获取解析循环中找到的分隔符.
    Delimiter := SubStr(v, Position, 1) ;取切开为主后面的字符
    if (isNumber(arr[1])=1)
    {
        v:=arr[1]+1
        OutputDebug,  % arr[1] "`n" arr[2]
        SendInput, %v%%Delimiter%
    }
}
return

【升级2】

针对a. 字母也适用

针对+ - * 开头的序号也适用

    ;markdown的自动编号功能
    ;作者:sunwind 
    ;日期:2018年8月21日
    ;语言:AutoHotkey Unicode 32-bit
    ;更新网址:https://blog.csdn.net/liuyukuan/article/details/81905725
    ;支持数字、字母类型的序号递增
    ;支持-、+、*这类无次序,序号
    ;序号后支持句点 顿号 右括号 中文右括号 等分隔符
    ;不怕输入法干扰
    ;支持开头有空格或者tab符号


    #SingleInstance, force
    global Chars:="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz++--##**"
    !Enter::
    {
        send {Home}+{End}^c{End}{Enter}
        v:=getClipboard()
        OutputDebug,% "原长" StrLen(v)
        Result := LTrim(v)
        OutputDebug,% "结果长" StrLen(Result)
        count:=StrLen(v)-StrLen(Result)
        OutputDebug >%count%<
        if (count>0)
            Prefix:=SubStr(v,1,count)
        Else
            Prefix:=""
        arr:=StrSplit(Result, [".",". ","、",")",")",A_Space,A_Tab])
        Position:= StrLen(arr[1])+1  ;已经切开的位置
        Delimiter := SubStr(Result, Position, 1) ;取切开为主后面的字符
        OutputDebug,  % arr[1] "|" Delimiter "|" arr[2]
        if (isNumber(arr[1])=1)
        {
            v:=arr[1]+1
            SendInput,{text}%Prefix%%v%%Delimiter%
        }
        Else
        {
            k:=getIdx(arr[1])
            if (k>0)
            {
                v:=getChr(k+1)

                Sendinput,{text}%Prefix%%v%%Delimiter%
            }
            OutputDebug 【%v%】
        }
        
    }
    return
    
    getIdx(_chr)
    {
        if (_chr="" or StrLen(_chr)>1)
            return 0
        return % InStr(Chars,_chr,1) 
    }
    getChr(idx)
    {

        return SubStr(Chars,idx, 1)
    }

    getClipboard()
    {
        return %Clipboard%
    }

    isNumber(str)
    {
        return str+1=""?str:1
    }

最终效果

猜你喜欢

转载自blog.csdn.net/liuyukuan/article/details/81905725
AHK