Vim 当我使用重新映射的 <Esc> 时,光标向前移动 7 个字符

Vim cursor moves forward 7 characters when I use my remapped <Esc>

我第一次尝试编写自己的 .vimrc。我已经习惯使用 "kj" 作为 Escape 的替代品,所以我添加了一个重新映射。这是我的 .vimrc 的副本:

set nocompatible
filetype off

" Plugins
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

Plugin 'gmarik/Vundle.vim'

Plugin 'sjl/badwolf'
Plugin 'scrooloose/nerdtree'
Plugin 'scrooloose/syntastic'
Plugin 'scrooloose/nerdcommenter'
Plugin 'tpope/vim-fugitive'
Plugin 'kien/ctrlp.vim'
Plugin 'majutsushi/tagbar'
Plugin 'bling/vim-airline'
Plugin 'bronson/vim-trailing-whitespace'

call vundle#end()
filetype plugin indent on

" Ctrl P
let g:ctrlp_atch_window = 'bottom,order:ttb'
let g:ctrlp_switch_buffer = 0
let g:ctrlp_working_path_mode = 0

" Syntastic
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

let g:syntastic_js_checkers = ['jshint']

" Fugitive
set statusline+=%{fugitive#statusline()}

" Vim Airline
set laststatus=2

" Colors
syntax enable
colorscheme badwolf
let g:badwolf_darkgutter=1

" Misc
set ttyfast
set backspace=indent,eol,start

" Spaces & Tabs
set tabstop=2
set expandtab
set softtabstop=2
set shiftwidth=2
set autoindent

" UI Layout
set number
set showcmd
set cursorline
set wildmenu
set showmatch
match Error /\%81v.\+/

" Searching
set ignorecase
set incsearch
set hlsearch

" Folding
" set foldmethod=indent
" set foldnestmax=10
" set foldenable
" nnoremap <space> za
" set foldlevelstart=10

" Shortcut Remmaping
inoremap kj <Esc>       
vnoremap kj <Esc>

" Movement
" nnoremap <buffer> <silent> j gj
" nnoremap <buffer> <silent> k gk
map <C-h> :wincmd h<CR>
map <C-j> :wincmd j<CR>
map <C-k> :wincmd k<CR>
map <C-l> :wincmd l<CR>

" Leader Shortcuts
let mapleader=","
let g:mapleader=","
nnoremap <leader>w :NERDTree<CR>
nnoremap <leader>l :call ToggleNumber()<CR>
nnoremap <leader><space> <silent> :nohlsearch<CR>
nnoremap <leader>t :TagbarToggle<CR>

" Custom Functions
function! ToggleNumber()
  if(&relativenumber == 1)
    set norelativenumber
    set number
  else
    set relativenumber
  endif
endfunc

" Return to last edit position when opening files (You want this!)
autocmd BufReadPost *
     \ if line("'\"") > 0 && line("'\"") <= line("$") |
     \   exe "normal! g`\"" |
     \ endif
" Remember info about open buffers on close
set viminfo^=%

当我在插入模式下按 "kj" 包含 "kj" 重新映射时,我进入正常模式,然后我的光标向前移动 7 个字符。如果不进行重新映射,这些字母将被简单地输入到缓冲区中。

我试过禁用所有插件,但问题仍然存在。这让我抓狂,知道是什么导致了这种情况吗?

inoremap kj <Esc> 后面有尾随空格,这被解释为映射的一部分。尝试删除这些空格。