KSotD (Word): Select Current Word -- Ctrl+Alt+W[ ]
The default Word keyboard shortcuts for cursor movement usually work pretty well for me. I realized today that one thing that’s really been bugging me is the inefficiency of selecting the word under the cursor using only the keyboard. I find that I’m often wanting to select a specific word to then, e.g., toggle its highlight with my Ctrl+Alt+Shift+H custom macro. With the mouse, a simple double-left-click is all that’s needed; with the keyboard, though, unless there’s a shortcut/command I don’t know about, I have to press at least two key combos:
Jump to the start of the word with Ctrl+←
Select the whole word with Ctrl+Shift+→
If the word is followed by a space, deselect that space with Shift+←
The muscle memory for this is pretty well established by now, but … there has to be a better way. So: Macro time!
I slapped together the following and assigned it to Ctrl+Alt+W, which AFAICT is unbound by default:
Sub SelectCurrentWord() Dim rxSpace As New RegExp With rxSpace .Global = False .IgnoreCase = True .MultiLine = False .Pattern = "\W" End With Selection.Expand wdWord Do While rxSpace.Test(Selection.Characters(Selection.Characters.Count)) Selection.MoveEnd wdCharacter, -1 Loop End Sub
The bulk of the work is done by the built-in
Selection.Expand wdWord, which expands both the start
of the selection backward to the nearest start-of-word boundary and the
end of the selection forward to the nearest start-of-word boundary. This latter behavior
gives an annoying outcome due to how Word structures word boundaries. If I interpret things
correctly, Word treats at least the following as the start of a word:
- (Most?) punctuation characters, including tabs
- The first letter of a grouping of letters following whitespace
So, when executed with the cursor within a word in the middle of a sentence,
expands the selection to include the spaces following that word.
I pretty much never want this behavior. 😠
Thus, enter the regex and the while loop. The
\W regex pattern
matches a single non-word character,
and I used a
Do While instead of a simple
If so that cases with multiple whitespace characters
are handled properly.
While there are probably some edge cases I haven’t hit yet, it’s worked great so far. If this ends up joining my array of frequently-used shortcuts, I figure I’ll probably create similar macros and keyboard shortcuts to select the current sentence (pairs with the Ctrl+Click shortcut) and to select the current paragraph (Triple-Click).