From 0426274fd46fb3a84e1ecf0c0d452d8a2f040997 Mon Sep 17 00:00:00 2001 From: nightwing <amirjanyan@gmail.com> Date: Sat, 27 May 2017 19:17:44 +0400 Subject: [PATCH] [vim] exit character exit mode on <C-c> --- keymap/vim.js | 7 +++++-- test/vim_test.js | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/keymap/vim.js b/keymap/vim.js index 0dbbae73..d4452c69 100644 --- a/keymap/vim.js +++ b/keymap/vim.js @@ -1110,7 +1110,9 @@ } } if (bestMatch.keys.slice(-11) == '<character>') { - inputState.selectedCharacter = lastChar(keys); + var character = lastChar(keys); + if (!character) return {type: 'none'}; + inputState.selectedCharacter = character; } return {type: 'full', command: bestMatch}; }, @@ -2704,7 +2706,7 @@ } } function lastChar(keys) { - var match = /^.*(<[\w\-]+>)$/.exec(keys); + var match = /^.*(<[^>]+>)$/.exec(keys); var selectedCharacter = match ? match[1] : keys.slice(-1); if (selectedCharacter.length > 1){ switch(selectedCharacter){ @@ -2715,6 +2717,7 @@ selectedCharacter=' '; break; default: + selectedCharacter=''; break; } } diff --git a/test/vim_test.js b/test/vim_test.js index 9f0e5f76..7d8f16fe 100644 --- a/test/vim_test.js +++ b/test/vim_test.js @@ -1607,6 +1607,13 @@ testVim('r', function(cm, vim, helpers) { cm.setCursor(0, 4); helpers.doKeys('v', 'j', 'h', 'r', '<Space>'); eq('wuuu \n her', cm.getValue(),'Replacing selection by space-characters failed'); + cm.setValue("ox"); + helpers.doKeys('r', '<C-c>'); + eq('ox', cm.getValue()); + helpers.doKeys('r', '<Del>'); + eq('ox', cm.getValue()); + helpers.doKeys('r', '<CR>'); + eq('\nx', cm.getValue()); }, { value: 'wordet\nanother' }); testVim('r_visual_block', function(cm, vim, helpers) { cm.setCursor(2, 3); -- GitLab