2 questions actually :
1) shortcut to toggle comment on selected lines ? Available on all iDEs I used starting with notepad++
2)the ctrl-k, ctrl-c
exhibits this behavior (quoted from someplace nicely worded):
C#: Each line where some text is selected is commented at the line-start with double-slash. If nothing is selected, the line where the cursor is is commented.
C++: If nothing is selected or complete lines are selected, it behaves as above. However, if parts of a line are selected, and no comment is selected as part of the selection (ex. select something in the middle of a code line), then the selection is surrounded by /* and */.
since I code in C++ I find this behavior annoying - I want to be able to comment out lines partially selected - any workarounds ?
As for question one, it's the same shortcut pair: Ctrl+K, Ctrl+C to toggle any comments on, Ctrl+K, Ctrl+U to toggle any comments off.
In the C/C++ editor, select multiple line(s) of code to comment out. To comment out multiple code lines right-click and select Source > Add Block Comment. ( CTRL+SHIFT+/ )
If you select a block of code and use the key sequence Ctrl+K+C, you'll comment out the section of code. Ctrl+K+U will uncomment the code.
Each line where some text is selected is commented at the line-start with double-slash. If nothing is selected, the line where the cursor is is commented.
In case of multiline selection: My solution uncomments only if all the lines in the selection are commented. I found it more intuitive.
Tools -> Macros -> Macros IDE...
In Macro Explorer right click on Macros and click New Macro Project...
Name your macro for e.g. MyMacroProject and click Add.
Right click on Module1 in your new macro project in Macro Explorer and click Edit.
Paste this into the macro editor window:
Option Strict Off
Option Explicit Off
Imports EnvDTE
Imports System.Text.RegularExpressions
Public Module Module1
Sub ToggleCommentLine()
Dim sel As TextSelection = DTE.ActiveDocument.Selection
Dim firstLine As Integer = sel.TopPoint.Line
Dim lastLine As Integer = sel.BottomPoint.Line
sel.GotoLine(firstLine, True)
sel.LineDown(True, lastLine - firstLine)
sel.EndOfLine(True)
'we un-comment only if there is no commented line
Dim allLinesCommented As Boolean = True
Dim lineIndex As Integer = firstLine
While allLinesCommented And (lineIndex <= lastLine)
sel.GotoLine(lineIndex, True)
allLinesCommented = Regex.IsMatch(sel.Text, "^\s*//.*$")
lineIndex += 1
End While
'iterate over the lines
For lineIndex = firstLine To lastLine
sel.GotoLine(lineIndex, True)
Dim line As String = sel.Text
Dim m As Match = Regex.Match(line, "^(\s*)(//)(.*)$")
If allLinesCommented Then
sel.Text = m.Groups(1).Value & m.Groups(3).Value
ElseIf Not m.Success Then
sel.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn)
sel.Text = "//"
End If
Next
'select all the affected lines
sel.GotoLine(firstLine, True)
sel.LineDown(True, lastLine - firstLine)
sel.EndOfLine(True)
End Sub
End Module
Save this file and close the macro editor window.
Bind your macro to a key:
Tools -> Options... -> Environment -> Keyboard
Type this into Show commands containing:
ToggleCommentLine
Select Macros.MyMacroProject.Module1.ToggleCommentLine.
Set a key at Press shortcut keys: . , then click Assign, then click OK.
Enjoy.
The behavior is intentional. If the user needed a tiny temporary change to a single line that did not require the entire line to be re-written, using the Ctrl+K, Ctrl+C shortcut pair allows him/her to comment out just the change and not the entire line.
Edit:
As for question one, it's the same shortcut pair: Ctrl+K, Ctrl+C to toggle any comments on, Ctrl+K, Ctrl+U to toggle any comments off.
Edit 2:
If you are still unsatisfied, get Visual Assist X from whole tomato software: http://www.wholetomato.com/ It adds an additional comment shortcut mapping to the '/' and '*' keys when text is highlighted.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With