From 3db417778b3ed3ac1ef38bbde2c2c7f71aeb768b Mon Sep 17 00:00:00 2001 From: tyru Date: Sat, 28 Apr 2018 23:42:40 +0900 Subject: [PATCH] fix: don't add beginning newline of linewise put in visual-mode --- src/actions/commands/actions.ts | 14 ++++++++------ test/mode/modeVisualLine.test.ts | 9 +++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/actions/commands/actions.ts b/src/actions/commands/actions.ts index 190d42d19da..88e4f275745 100644 --- a/src/actions/commands/actions.ts +++ b/src/actions/commands/actions.ts @@ -1289,12 +1289,12 @@ export class PutCommand extends BaseCommand { textToAdd = text; whereToAddText = dest; } else if ( - vimState.currentMode === ModeName.Visual && + (vimState.currentMode === ModeName.Visual || vimState.currentMode === ModeName.VisualLine) && register.registerMode === RegisterMode.LineWise ) { // in the specific case of linewise register data during visual mode, // we need extra newline feeds - textToAdd = '\n' + text + '\n'; + textToAdd = (vimState.currentMode === ModeName.Visual ? '\n' : '') + text + '\n'; whereToAddText = dest; } else { if (adjustIndent) { @@ -1524,6 +1524,7 @@ export class PutCommandVisual extends BaseCommand { // If the to be inserted text is linewise we have a seperate logic delete the // selection first than insert + let oldMode = vimState.currentMode; let register = await Register.get(vimState); if (register.registerMode === RegisterMode.LineWise) { let deleteResult = await new operator.DeleteOperator(this.multicursorIndex).run( @@ -1533,11 +1534,12 @@ export class PutCommandVisual extends BaseCommand { false ); // to ensure, that the put command nows this is - // an linewise register insertion in visual mode - let oldMode = deleteResult.currentMode; - deleteResult.currentMode = ModeName.Visual; - deleteResult = await new PutCommand().exec(start, deleteResult, true); + // an linewise register insertion in visual mode of + // characterwise, linewise + let resultMode = deleteResult.currentMode; deleteResult.currentMode = oldMode; + deleteResult = await new PutCommand().exec(start, deleteResult, true); + deleteResult.currentMode = resultMode; return deleteResult; } diff --git a/test/mode/modeVisualLine.test.ts b/test/mode/modeVisualLine.test.ts index 8bed73b8a66..93aa8311e8c 100644 --- a/test/mode/modeVisualLine.test.ts +++ b/test/mode/modeVisualLine.test.ts @@ -315,4 +315,13 @@ suite('Mode Visual Line', () => { assertEqualLines(['one two threeone two three', 'one two three']); }); }); + + suite('replace text in linewise visual-mode with linewise register content', () => { + newTest({ + title: 'yyVp does not change the content but changes cursor position', + start: ['fo|o', 'bar', 'fun', 'baz'], + keysPressed: 'yyVp', + end: ['|foo', 'bar', 'fun', 'baz'], + }); + }); });