Change:
<ins> /*--------------------------------------------------------------------------------------------- *  Copyright (c) Microsoft Corporation. All rights reserved. *  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ 'use strict'; import {Range} from 'vs/editor/common/core/range'; import {Selection} from 'vs/editor/common/core/selection'; import {ICommand, ICursorStateComputerData, IEditOperationBuilder, ITokenizedModel} from 'vs/editor/common/editorCommon'; export class MoveCarretCommand implements ICommand { private _selection: Selection; private _isMovingLeft: boolean; private _cutStartIndex: number; private _cutEndIndex: number; private _moved: boolean; private _selectionId: string; constructor(selection: Selection, isMovingLeft: boolean) { this._selection = selection; this._isMovingLeft = isMovingLeft; } public getEditOperations(model: ITokenizedModel, builder: IEditOperationBuilder): void { var s = this._selection; this._selectionId = builder.trackSelection(s); if (s.startLineNumber !== s.endLineNumber) { return; } if (this._isMovingLeft && s.startColumn === 0) { return; } else if (!this._isMovingLeft && s.endColumn === model.getLineMaxColumn(s.startLineNumber)) { return; } var lineNumber = s.selectionStartLineNumber; var lineContent = model.getLineContent(lineNumber); var left; var middle; var right; if (this._isMovingLeft) { left = lineContent.substring(0, s.startColumn - 2); middle = lineContent.substring(s.startColumn - 1, s.endColumn - 1); right = lineContent.substring(s.startColumn - 2, s.startColumn - 1) + lineContent.substring(s.endColumn - 1); } else { left = lineContent.substring(0, s.startColumn - 1) + lineContent.substring(s.endColumn - 1, s.endColumn); middle = lineContent.substring(s.startColumn - 1, s.endColumn - 1); right = lineContent.substring(s.endColumn); } var newLineContent = left + middle + right; builder.addEditOperation(new Range(lineNumber, 1, lineNumber, model.getLineMaxColumn(lineNumber)), null); builder.addEditOperation(new Range(lineNumber, 1, lineNumber, 1), newLineContent); this._cutStartIndex = s.startColumn + (this._isMovingLeft ? -1 : 1); this._cutEndIndex = this._cutStartIndex + s.endColumn - s.startColumn; this._moved = true; } public computeCursorState(model: ITokenizedModel, helper: ICursorStateComputerData): Selection { var result = helper.getTrackedSelection(this._selectionId); if (this._moved) { result = result.setStartPosition(result.startLineNumber, this._cutStartIndex); result = result.setEndPosition(result.startLineNumber, this._cutEndIndex); } return result; } } </ins>

Discussion:
Atom 1.8 will introduce two new commands to move text selections left and right. A description of the feature is available in It would be great to have these commands on VSCode. !
Thanks for bringing this feature to our attention fyi
That looks so cool
Could we use the <kbdAlt</kbd+<kbd←</kbd(respectively <kbdAlt</kbd+<kbd→</kbd) as the keyboard shortcut? That would match perfectly the actions to move lines up or down.
I think <kbdcontrol</kbd+ <kbdcmd</kbd+ <kbd←/→</kbdis better(Atom 1.8). <kbdAlt</kbd+ <kbd←/→</kbdis to move the cursor around the word.