我想開發一個AutoHotkey腳本來評論或取消註釋代碼塊,而不管我使用的編輯器(它甚至可以是記事本)。Autohotkey:代碼塊註釋和取消註釋熱鍵
我想到的一種實現方式是選擇一段代碼,然後按熱鍵將其註釋掉,或者選擇一個註釋代碼並按另一個熱鍵來取消它與IDE一樣的註釋。
代碼語言在這裏並不重要。每種語言都有一些用於多行註釋的語法,因此可以修改腳本以適用於任何語言。
我應該怎麼辦?
恐怕這個問題可能有重複。但是,我找不到任何。
我想開發一個AutoHotkey腳本來評論或取消註釋代碼塊,而不管我使用的編輯器(它甚至可以是記事本)。Autohotkey:代碼塊註釋和取消註釋熱鍵
我想到的一種實現方式是選擇一段代碼,然後按熱鍵將其註釋掉,或者選擇一個註釋代碼並按另一個熱鍵來取消它與IDE一樣的註釋。
代碼語言在這裏並不重要。每種語言都有一些用於多行註釋的語法,因此可以修改腳本以適用於任何語言。
我應該怎麼辦?
恐怕這個問題可能有重複。但是,我找不到任何。
這是一個簡化的方法給你。
您可能需要在某處添加sleep
或clipwait
。
!^c::
send ^c
thisvar := clipboard
thisvar := "<!--" . thisvar . "-->"
clipboard := thisvar
send ^v
return
這應該給你一個啓動的地方。
就像MCL說的,如果你想使用不同的評論簽名,那麼你將不得不編寫一個複雜的函數來解析複製的選擇並確定它是什麼語言。你的一個想法是看你是否可以從你正在編輯的編輯器中獲取代碼文件的路徑 - 然後你可以通過文件擴展名來判斷正在使用哪種代碼。這在大多數情況下都會起作用 - 但只有當代碼文件包含單一類型的代碼時(例如C++或ahk,由於它包含幾種類型,html會更困難)。
謝謝....我已經準備好使用不同的熱鍵來評論不同語言的代碼 – tumchaaditya
您也可以使用彈出菜單進行選擇 - 以防您不想記住多個熱鍵。彈出式菜單會將焦點返回到原始應用程序。 – bgmCoder
感謝您的想法.. – tumchaaditya
這是我的代碼取消註釋:
!^d::
send ^c
Sleep, 40
StringReplace, clipboard, clipboard, -->, , All
StringReplace, clipboard, clipboard, <!--, , All
Sleep, 40
send ^v
return
熱鍵爲Ctrl + Alt + d
感謝很多人提供這個等待/睡眠代碼,我的是非常類似於@ bgm_coder給出的,但過去並不總是完美的工作,睡眠/等待解決了這個問題。 – user3065757
這是一個腳本註釋多行,並取消他們。用於評論的字符可以針對「commentChars」變量進行修改。
按Ctrl + Alt鍵+Ç到評論選擇
按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
}
的基本過程是:1.獲取突出顯示的文本(很可能通過剪貼板)2。解析代碼並在必要時評論/取消註釋3.如果發生更改,請將代碼發回到源窗口。非常重要的部分是解析。最好的情況是您有相應語言的完整代碼分析器。否則,如果你想要複雜的東西,你必須實現一套廣泛的解析規則。例如,用於處理嵌套註釋,忽略字符串,檢測句法上不正確的註釋等。 – MCL
MCL - 您應該將其作爲答案發布,而不是評論。我會+1你的答案。 – bgmCoder