Autohotkey 自动热键:用于在下一行中自动缩进热字符串的脚本

Autohotkey 自动热键:用于在下一行中自动缩进热字符串的脚本,autohotkey,indentation,Autohotkey,Indentation,我制作了一个自动热键脚本,它可以扩展一些有用的html标记,比如当您键入时,它会自动扩展到并创建一个带有一个选项卡空间的新行,并将光标放在其中,如下所示(如代码编辑器) 这个代码就像 :*:<div>::<div>`n`t`n</div>{up} :*:`n`t`n{up} 但是,当我在一个制表符空间之后键入相同的代码时,它必须重新调整结束标记,使其在开始标记之前有制表符空间。喜欢里面的标签吗 <div> <div>

我制作了一个自动热键脚本,它可以扩展一些有用的html标记,比如当您键入时,它会自动扩展到并创建一个带有一个选项卡空间的新行,并将光标放在其中,如下所示(如代码编辑器)


这个代码就像

:*:<div>::<div>`n`t`n</div>{up}
:*:`n`t`n{up}
但是,当我在一个制表符空间之后键入相同的代码时,它必须重新调整结束标记,使其在开始标记之前有制表符空间。喜欢里面的标签吗

<div>
     <div>

     </div>
<div>

对于一个选项卡,代码如下所示:

:*:<div>::<div>`n`t`t`n`t</div>{up}
:*:`n`t`t`n`t{up}

我不知道如何组合上述两个代码,以便无论制表符空间是什么,结束标记都应与其开始标记放置在同一缩进处

如果我理解正确,您希望有一个代码可以插入开始和结束标记,同时保留和维护缩进方案。在我下面的解决方案中,它复制当前行上光标之前的所有内容,并将其粘贴到每行的开头。我还把它做成了一个函数,这样它就可以被重用为任意多的标记,正如我添加的几个额外的示例所示

编辑:根据下面的注释修改代码

:*:<div>::
:*:<html>::
:*:<title>::
:*:<body>::
f_TagReplace( SubStr( A_ThisHotkey , 4 ) , "</" . SubStr( A_ThisHotkey , 5 ))
Return

:*:{::
f_TagReplace( "{{}" , "{}}" )
Return

f_TagReplace( sTag , sTagEnd )
{
    Clipboard := ""
    Send , +{home}^c
    ClipWait , 0.2
    Send , ^v%sTag%`n^v`t`n^v%sTagEnd%{up}{end}
}
:*::
:*:::
:*:::
:*:::

f_TagReplace(SubStr(A_ThisHotkey,4),“我想扩展相同的逻辑,以精确缩进自动完成左大括号{'和右大括号}”,但我不能这样做,你能解释一下吗..你说的“精确缩进”是什么意思?右大括号
与右大括号处于相同的缩进级别{?是的,结束括号的缩进级别与开始括号的缩进级别相同。请参阅更新的代码。请注意,您可能希望使此上下文敏感或使用特殊的组合键,以便可以使用
{
如果需要的话,通常是这样。你可以这么说。不过,我想,如果你有更多的经验,你会发现我的编码水平很低。
:*:<div>::
:*:<html>::
:*:<title>::
:*:<body>::
f_TagReplace( SubStr( A_ThisHotkey , 4 ) , "</" . SubStr( A_ThisHotkey , 5 ))
Return

:*:{::
f_TagReplace( "{{}" , "{}}" )
Return

f_TagReplace( sTag , sTagEnd )
{
    Clipboard := ""
    Send , +{home}^c
    ClipWait , 0.2
    Send , ^v%sTag%`n^v`t`n^v%sTagEnd%{up}{end}
}
:*:<div>::
:*:<html>::
:*:<title>::
:*:<body>::
f_TagReplace( SubStr( A_ThisHotkey , 4 ))
Return

f_TagReplace( sTag )
{
    sTagEnd := "</" . SubStr( sTag , 2 )
    Clipboard := ""
    Send , +{home}^c
    ClipWait , 0.2
    Send , ^v%sTag%`n^v`t`n^v%sTagEnd%{up}
}