Originally I thought you could simply make a macro to run 2 smartSelect.expand commands in a row (as in the commented code below). That does work - except for single words like someword with no camelCase - and then the first grow selects the entire word under the cursor and the second grow selects the line or enclosing block, not what you want.
"multiCommand.commands": [ // in settings.json { "command": "multiCommand.selectWord", "sequence": [ // "editor.action.smartSelect.expand", // "editor.action.smartSelect.expand", "cursorWordStartLeft", "cursorWordRightSelect", ] } ]
So I looked for another way to do it and I think I found it with the macro above (which uses the multi-command extension). And this in keybindings.json:
{ "key": "shift+alt+right", // disable so you can use the same keybinding "command": "-editor.action.smartSelect.expand", "when": "editorTextFocus" }, { "key": "shift+alt+right", // trigger the macro with the same keybinding if you wish "command": "extension.multiCommand.execute", "args": { "command": "multiCommand.selectWord" }, "when": "editorTextFocus" },
The downside to this approach is that you lose the smartSelect.expand beyond the current word - it will not expand to the containing block for example. You decide if that is important to you. If you use a different keybinding then you don't have to disable the smartSelect grow command and you can have both options.

As of v1.44 the behaviour of Add Selection to Next Find Match has changed in how it calculates the word definition. Perhaps it is better for you.
The command Add Selection to Next Find Match (kb(editor.action.addSelectionToNextFindMatch)) now respects the setting editor.wordSeparators. Previously, it used to pick up the word definition as defined by the current file's language.