From b6a1a9d24d6ba72378844e2a5cb5b7b8bca3d9f2 Mon Sep 17 00:00:00 2001
From: Yunchi Luo <mightyguava@gmail.com>
Date: Sat, 4 Oct 2014 14:46:49 -0400
Subject: [PATCH] [vim] Fix key handling for control characters

---
 keymap/vim.js | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/keymap/vim.js b/keymap/vim.js
index a4cfd5796..355fee62d 100644
--- a/keymap/vim.js
+++ b/keymap/vim.js
@@ -229,7 +229,7 @@
       function lookupKey(e) {
         var keyCode = e.keyCode;
         if (modifierCodes.indexOf(keyCode) != -1) { return; }
-        var hasModifier = e.ctrlKey || e.shiftKey || e.metaKey || e.ctrlKey;
+        var hasModifier = e.ctrlKey || e.shiftKey || e.metaKey;
         var key = CodeMirror.keyNames[keyCode];
         key = specialKey[key] || key;
         var name = '';
@@ -259,7 +259,8 @@
       // non-standard keyboard layouts.
       function handleKeyPress(cm, e) {
         var code = e.charCode || e.keyCode;
-        if (e.ctrlKey || e.metaKey || e.altKey) { return; }
+        if (e.ctrlKey || e.metaKey || e.altKey ||
+            e.shiftKey && code < 32) { return; }
         var name = String.fromCharCode(code);
 
         CodeMirror.signal(cm, 'vim-keypress', name);
@@ -691,6 +692,7 @@
           if (/^[1-9]\d*$/.test(keys)) { return true; }
 
           var keysMatcher = /^(\d*)(.*)$/.exec(keys);
+          if (!keysMatcher) { clearInputState(cm); return false; }
           var context = vim.visualMode ? 'visual' :
                                          'normal';
           var match = commandDispatcher.matchCommand(keysMatcher[2] || keysMatcher[1], defaultKeymap, vim.inputState, context);
-- 
GitLab