Console Vim: Still can't get keys with <Esc> leading key-codes to work in Insert mode

Previous Topic Next Topic
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Console Vim: Still can't get keys with <Esc> leading key-codes to work in Insert mode

Jacky Liu
I use a lot of key mappings with Meta keys, when using console vim, I have the following codes in my .vimrc file:
    let char= 'a'
    while char <= 'z'
        exec "set <M-" . char . ">=\<Esc>" . char
        let char= nr2char(1+char2nr(char))
    exec "set <M-" . '.' . ">=\<Esc>" . '.'
    set notimeout
    set ttimeout
    set ttimeoutlen=100

After these settings, all the key mappings with Meta keys work seamlessly in both Normal and Command mode, but not in Insert mode, Vim acts like always interpreting those key codes as one <Escape> key followed by another key in Insert mode. Cursor keys (←↑→↓) don't work either.

I found out that I actually can make the Insert mode key mappings work, only if I explicitly set at least one mapping with the leading <Escape> key:

    inoremap    <Esc>m        <nop>

but this isn't a solution as it will introduce ambiguity to the Escape key. Setting 'timeout' and 'timeoutlen' options in turn ain't solution either as they will void all the other key mappings with multiple key strokes.

Is there any way to work around this problem? Thanks.

I use Ubuntu 16.04 with Gnome Terminal, typing ":set term?" in my vim shows "term=xterm-256color", and below is the output of the :version command:

VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Apr  3 2017 22:40:41)
Included patches: 1-540
Compiled by jacky
Huge version with GTK2 GUI.  Features included (+) or not (-):
+acl             +clipboard       +dialog_con_gui  +file_in_path    +job             -lua             +mouse_sgr       +path_extra      +rightleft       +tag_old_static  +user_commands   +writebackup
+arabic          +cmdline_compl   +diff            +find_in_path    +jumplist        +menu            -mouse_sysmouse  -perl            -ruby            -tag_any_white   +vertsplit       +X11
+autocmd         +cmdline_hist    +digraphs        +float           +keymap          +mksession       +mouse_urxvt     +persistent_undo +scrollbind      -tcl             +virtualedit     -xfontset
+balloon_eval    +cmdline_info    +dnd             +folding         +lambda          +modify_fname    +mouse_xterm     +postscript      +signs           +termguicolors   +visual          +xim
+browse          +comments        -ebcdic          -footer          +langmap         +mouse           +multi_byte      +printer         +smartindent     +terminfo        +visualextra     -xpm
++builtin_terms  +conceal         +emacs_tags      +fork()          +libcall         +mouseshape      +multi_lang      +profile         +startuptime     +termresponse    +viminfo         +xsmp_interact
+byte_offset     +cryptv          +eval            +gettext         +linebreak       +mouse_dec       -mzscheme        -python          +statusline      +textobjects     +vreplace        +xterm_clipboard
+channel         +cscope          +ex_extra        -hangul_input    +lispindent      -mouse_gpm       +netbeans_intg   +python3         -sun_workshop    +timers          +wildignore      -xterm_save
+cindent         +cursorbind      +extra_search    +iconv           +listcmds        -mouse_jsbterm   +num64           +quickfix        +syntax          +title           +wildmenu
+clientserver    +cursorshape     +farsi           +insert_expand   +localmap        +mouse_netterm   +packages        +reltime         +tag_binary      +toolbar         +windows

You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit

You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
For more options, visit