我正在尝试开发一个Autohotkey脚本来评论或取消注释代码块,而不管我使用的编辑器(它甚至可以是记事本)。
我想到的实现方式是我选择一些代码并按热键将其注释掉,或者我选择一个注释代码并按另一个热键以取消注释它与IDE的方式。
代码的语言在这里无关紧要。每种语言都有一些多行注释的语法,因此可以修改脚本以适用于任何语言。
我应该怎么做?
恐怕这些问题可能有重复。但是,我找不到任何。
答案 0 :(得分:2)
这是一个简化的方法。
您可能需要在某处添加sleep
或clipwait
。
!^c::
send ^c
thisvar := clipboard
thisvar := "<!--" . thisvar . "-->"
clipboard := thisvar
send ^v
return
这应该可以让你在某个地方开始。
就像MCL所说,如果你想使用不同的评论签名,那么你将不得不编写一个精心设计的函数来解析复制的选择并确定它是什么语言。您的一个想法是查看是否可以从您正在使用的编辑器中获取代码文件的路径 - 然后您可以通过文件扩展名判断正在使用的代码类型。这大部分时间都可以工作 - 但是只有当代码文件包含一种代码时(例如C ++或ahk - html会因为包含多种类型而更加困难)。
答案 1 :(得分:0)
这是我取消注释的代码:
!^d::
send ^c
Sleep, 40
StringReplace, clipboard, clipboard, -->, , All
StringReplace, clipboard, clipboard, <!--, , All
Sleep, 40
send ^v
return
热键是ctrl + alt + d
答案 2 :(得分:0)
这是一个评论多行并取消注释的脚本。用于评论的字符可以针对&#34; commentChars&#34;进行修改。变量。
Ctrl + Alt + c 评论选择
Ctrl + Alt + x 取消注释选择
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
commentChars := "//"
!^c::
send ^c
delimiter := "`n"
thisvar := ""
size := parsedTextContainerSize(clipboard,delimiter)
Loop, parse, clipboard, `n, `r
{
;MsgBox, index = %A_Index% . size = %size%
if (A_Index < size)
{
thisvar := thisvar . commentChars . A_LoopField . "`n"
}
else
{
;MsgBox, finally = %A_Index%
thisvar := thisvar . commentChars . A_LoopField
}
}
clipboard := thisvar
send ^v
return
!^x::
send ^c
delimiter := "`n"
thisvar := ""
size := parsedTextContainerSize(clipboard,delimiter)
Loop, parse, clipboard, `n, `r
{
line := ""
firtTwoChars := ""
pos := -1
StringGetPos, pos, A_LoopField, %commentChars%
if (pos = 0)
{
;StringReplace, newString, originalString, –, %A_Space%, 1
StringReplace, line, A_LoopField, %commentChars%, ,
;MsgBox, line = %line%
}
else
{
line := A_LoopField
}
;MsgBox, index = %A_Index% . size = %size%
if (A_Index < size)
{
thisvar := thisvar . line . "`n"
}
else
{
;MsgBox, finally = %A_Index%
thisvar := thisvar . line
}
}
clipboard := thisvar
send ^v
return
parsedTextContainerSize(text,delimiter)
{
count = 0
pos = 0
Loop,
{
StringGetPos, pos, text, %delimiter%,, %pos%
If (Errorlevel<>0)
break
count += 1
pos +=1
}
return count + 1
}