未验证 提交 c7ec4738 编写于 作者: A Alex Dima

Fixes #40695: Maintain cursor position when pasting whole line

上级 ede82b16
......@@ -6,7 +6,7 @@
import { CharCode } from 'vs/base/common/charCode';
import { onUnexpectedError } from 'vs/base/common/errors';
import * as strings from 'vs/base/common/strings';
import { ReplaceCommand, ReplaceCommandWithOffsetCursorState, ReplaceCommandWithoutChangingPosition } from 'vs/editor/common/commands/replaceCommand';
import { ReplaceCommand, ReplaceCommandWithOffsetCursorState, ReplaceCommandWithoutChangingPosition, ReplaceCommandThatPreservesSelection } from 'vs/editor/common/commands/replaceCommand';
import { ShiftCommand } from 'vs/editor/common/commands/shiftCommand';
import { SurroundSelectionCommand } from 'vs/editor/common/commands/surroundSelectionCommand';
import { CursorColumns, CursorConfiguration, EditOperationResult, EditOperationType, ICursorSimpleModel, isQuote } from 'vs/editor/common/controller/cursorCommon';
......@@ -91,7 +91,7 @@ export class TypeOperations {
if (pasteOnNewLine) {
// Paste entire line at the beginning of line
let typeSelection = new Range(position.lineNumber, 1, position.lineNumber, 1);
commands[i] = new ReplaceCommand(typeSelection, text);
commands[i] = new ReplaceCommandThatPreservesSelection(typeSelection, text, selection);
} else {
commands[i] = new ReplaceCommand(selection, text);
}
......
......@@ -2591,7 +2591,37 @@ suite('Editor Controller - Cursor Configuration', () => {
'',
' }',
].join('\n'));
assertCursor(cursor, new Position(5, 1));
assertCursor(cursor, new Position(4, 1));
});
model.dispose();
});
test('issue #40695: maintain cursor position when copying lines using ctrl+c, ctrl+v', () => {
let model = createTextModel(
[
' function f() {',
' // I\'m gonna copy this line',
' // Another line',
' return 3;',
' }',
].join('\n')
);
withTestCodeEditor(null, { model: model }, (editor, cursor) => {
editor.setSelections([new Selection(4, 10, 4, 10)]);
cursorCommand(cursor, H.Paste, { text: ' // I\'m gonna copy this line\n', pasteOnNewLine: true });
assert.equal(model.getValue(), [
' function f() {',
' // I\'m gonna copy this line',
' // Another line',
' // I\'m gonna copy this line',
' return 3;',
' }',
].join('\n'));
assertCursor(cursor, new Position(5, 10));
});
model.dispose();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册