2014-01-12 94 views
1

我有一个vim命令替换单词的问题,特别是在像e,w和b这样的移动命令之后。Vim延迟与cw命令

具体来说,总有一款适合CW的延迟,而不是词”,例如以引号内更改文本。

其次,如果我搬到三个字前进,类型CW改变第三个词,而无需等待有一点,它向前移动另一个字,并且cw就是那个。

我从我的Vimrc中删除了很多,我无法确定可能导致问题的原因。 viw然后c快速改变这个词,这对我来说没有任何意义。对这个问题的任何了解都将是非常棒的。依赖于系统,它在三台不同的计算机上是一致的,也不是语法/文件类型特定的。

autocmd! 
set nocompatible                             
filetype off 

set rtp+=$HOME/.local/lib/python2.7/site-packages/powerline/bindings/vim 
set rtp+=~/.vim/bundle/vundle/ 
call vundle#rc() 

Bundle 'gmarik/vundle' 

Bundle 'nanotech/jellybeans.vim' 
Bundle 'bling/vim-airline' 

Bundle 'kchmck/vim-coffee-script' 

Bundle 'bitc/vim-bad-whitespace' 
Bundle 'scrooloose/nerdtree' 

Bundle 'Lokaltog/vim-easymotion' 

Bundle 'mileszs/ack.vim' 

Bundle 'othree/html5.vim' 

Bundle 'juvenn/mustache.vim' 

Bundle 'yaymukund/vim-rabl' 
Bundle 'int3/vim-extradite' 

Bundle 'tpope/vim-fugitive' 
Bundle 'tpope/vim-haml' 
Bundle 'tpope/vim-repeat' 
Bundle 'tpope/vim-endwise' 
Bundle 'tpope/vim-rails' 
Bundle 'tpope/vim-eunuch' 
Bundle 'tpope/vim-surround' 
Bundle 'tpope/vim-markdown' 

Bundle 'kein/ctrlp.vim' 
Bundle 'wincent/Command-T' 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" BASIC EDITING CONFIGURATION 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
set nocompatible 
" allow unsaved background buffers and remember marks/undo for them 
set hidden 
" remember more commands and search history 
set nu 
set history=10000 
set expandtab 
set tabstop=4 
set shiftwidth=4 
set softtabstop=4 
set autoindent 
set laststatus=2 
set showmatch 
set incsearch 
set hlsearch 
set t_Co=256 
" make searches case-sensitive only if they contain upper-case characters 
set ignorecase smartcase 
" highlight current line 
set cursorline 
set cmdheight=1 
set switchbuf=useopen 
set showtabline=2 
set winwidth=79 
" This makes RVM work inside Vim. I have no idea why. 
set shell=bash 
" Prevent Vim from clobbering the scrollback buffer. See 
" http://www.shallowsky.com/linux/noaltscreen.html 
set t_ti= t_te= 
" keep more context when scrolling off the end of a buffer 
set scrolloff=3 
" Store temporary files in a central spot 
set backup 
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
" allow backspacing over everything in insert mode 
set backspace=indent,eol,start 
" display incomplete commands 
set showcmd 
" Enable highlighting for syntax 
syntax on 
" Enable file type detection. 
" Use the default filetype settings, so that mail gets 'tw' set to 72, 
" 'cindent' is on in C files, etc. 
" Also load indent files, to automatically do language-dependent indenting. 
filetype plugin indent on 
" use emacs-style tab completion when selecting files, etc 
set wildmode=longest,list 
" make tab completion for files/buffers act like bash 
set wildmenu 
let mapleader="," 
" Fix slow O inserts 
:set timeout timeoutlen=1000 ttimeoutlen=100 
" Normally, Vim messes with iskeyword when you open a shell file. This can 
" leak out, polluting other file types even after a 'set ft=' change. This 
" variable prevents the iskeyword change so it can't hurt anyone. 
let g:sh_noisk=1 
" Modelines (comments that set vim options on a per-file basis) 
set modeline 
set modelines=3 
" Turn folding off for real, hopefully 
set foldmethod=manual 
set nofoldenable 

let g:airline_left_sep = '' 
let g:airline_left_alt_sep = '' 
let g:airline_right_sep = '' 
let g:airline_right_alt_sep = '' 
let g:airline_fugitive_prefix = ' ' 
let g:airline_readonly_symbol = '' 
let g:airline_linecolumn_prefix = '' 
let g:airline_theme='badwolf' 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" CUSTOM AUTOCMDS 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
augroup vimrcEx 
    " Clear all autocmds in the group 
    autocmd! 
    autocmd FileType text setlocal textwidth=78 
    " Jump to last cursor position unless it's invalid or in an event handler 
    autocmd BufReadPost * 
    \ if line("'\"") > 0 && line("'\"") <= line("$") | 
    \ exe "normal g`\"" | 
    \ endif 

    "for ruby, autoindent with two spaces, always expand tabs 
    autocmd FileType ruby,haml,eruby,yaml,html,javascript,sass,cucumber set ai sw=2 sts=2 et 
    autocmd FileType python set sw=4 sts=4 et 

    autocmd! BufRead,BufNewFile *.sass setfiletype sass 

    autocmd BufRead *.mkd set ai formatoptions=tcroqn2 comments=n:&gt; 
    autocmd BufRead *.markdown set ai formatoptions=tcroqn2 comments=n:&gt; 

    " Indent p tags 
    " autocmd FileType html,eruby if g:html_indent_tags !~ '\\|p\>' | let g:html_indent_tags .= '\|p\|li\|dt\|dd' | endif 

    " Don't syntax highlight markdown because it's often wrong 
    autocmd! FileType mkd setlocal syn=off 

    " Leave the return key alone when in command line windows, since it's used 
    " to run commands there. 
    autocmd! CmdwinEnter * :unmap <cr> 
    autocmd! CmdwinLeave * :call MapCR() 
augroup END 

" Create the dirs required for a save if they don't exist. 
function s:MkNonExDir(file, buf) 
    if empty(getbufvar(a:buf, '&buftype')) && a:file!~#'\v^\w+\:\/' 
    let dir=fnamemodify(a:file, ':h') 
    if !isdirectory(dir) 
     call mkdir(dir, 'p') 
    endif 
    endif 
endfunction 

augroup BWCCreateDir 
    autocmd! 
    autocmd BufWritePre * :call s:MkNonExDir(expand('<afile>'), +expand('<abuf>')) 
augroup END 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" STATUS LINE 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
:set statusline=%<%f\ (%{&ft})\ %-4(%m%)%=%-19(%3l,%02c%03V%) 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" MISC KEY MAPS 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
map <leader>y "*y 
" Move around splits with <c-hjkl> 
nnoremap <c-j> <c-w>j 
nnoremap <c-k> <c-w>k 
nnoremap <c-h> <c-w>h 
nnoremap <c-l> <c-w>l 
" Insert a hash rocket with <c-l> 
imap <c-l> <space>=><space> 
" Can't be bothered to understand ESC vs <c-c> in insert mode 
imap <c-c> <esc> 
nnoremap <leader><leader> <c-^> 
" Close all other windows, open a vertical split, and open this file's test 
" alternate in it. 
nnoremap <leader>s :call FocusOnFile()<cr> 
function! FocusOnFile() 
    tabnew % 
    normal! v 
    normal! l 
    call OpenTestAlternate() 
    normal! h 
endfunction 
" Reload in chrome 
map <leader>l :w\|:silent !reload-chrome<cr> 
" Align selected lines 
vnoremap <leader>ib :!align<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" MULTIPURPOSE TAB KEY 
" Indent if we're at the beginning of a line. Else, do completion. 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! InsertTabWrapper() 
    let col = col('.') - 1 
    if !col || getline('.')[col - 1] !~ '\k' 
     return "\<tab>" 
    else 
     return "\<c-p>" 
    endif 
endfunction 
inoremap <tab> <c-r>=InsertTabWrapper()<cr> 
inoremap <s-tab> <c-n> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" OPEN FILES IN DIRECTORY OF CURRENT FILE 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
cnoremap %% <C-R>=expand('%:h').'/'<cr> 
map <leader>e :edit %% 
map <leader>v :view %% 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" RENAME CURRENT FILE 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! RenameFile() 
    let old_name = expand('%') 
    let new_name = input('New file name: ', expand('%'), 'file') 
    if new_name != '' && new_name != old_name 
     exec ':saveas ' . new_name 
     exec ':silent !rm ' . old_name 
     redraw! 
    endif 
endfunction 
map <leader>n :call RenameFile()<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" PROMOTE VARIABLE TO RSPEC LET 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! PromoteToLet() 
    :normal! dd 
    " :exec '?^\s*it\>' 
    :normal! P 
    :.s/\(\w\+\) = \(.*\)$/let(:\1) { \2 }/ 
    :normal == 
endfunction 
:command! PromoteToLet :call PromoteToLet() 
:map <leader>p :PromoteToLet<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" EXTRACT VARIABLE (SKETCHY) 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! ExtractVariable() 
    let name = input("Variable name: ") 
    if name == '' 
     return 
    endif 
    " Enter visual mode (not sure why this is needed since we're already in 
    " visual mode anyway) 
    normal! gv 

    " Replace selected text with the variable name 
    exec "normal c" . name 
    " Define the variable on the line above 
    exec "normal! O" . name . " = " 
    " Paste the original selected text to be the variable value 
    normal! $p 
endfunction 
vnoremap <leader>rv :call ExtractVariable()<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" INLINE VARIABLE (SKETCHY) 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! InlineVariable() 
    " Copy the variable under the cursor into the 'a' register 
    :let l:tmp_a = @a 
    :normal "ayiw 
    " Delete variable and equals sign 
    :normal 2daW 
    " Delete the expression into the 'b' register 
    :let l:tmp_b = @b 
    :normal "bd$ 
    " Delete the remnants of the line 
    :normal dd 
    " Go to the end of the previous line so we can start our search for the 
    " usage of the variable to replace. Doing '0' instead of 'k$' doesn't 
    " work; I'm not sure why. 
    normal k$ 
    " Find the next occurence of the variable 
    exec '/\<' . @a . '\>' 
    " Replace that occurence with the text we yanked 
    exec ':.s/\<' . @a . '\>/' . @b 
    :let @a = l:tmp_a 
    :let @b = l:tmp_b 
endfunction 
nnoremap <leader>ri :call InlineVariable()<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" MAPS TO JUMP TO SPECIFIC COMMAND-T TARGETS AND FILES 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
map <leader>gr :topleft :split config/routes.rb<cr> 
function! ShowRoutes() 
    " Requires 'scratch' plugin 
    :topleft 100 :split __Routes__ 
    " Make sure Vim doesn't write __Routes__ as a file 
    :set buftype=nofile 
    " Delete everything 
    :normal 1GdG 
    " Put routes output in buffer 
    :0r! zeus rake -s routes 
    " Size window to number of lines (1 plus rake output length) 
    :exec ":normal " . line("$") . "_ " 
    " Move cursor to bottom 
    :normal 1GG 
    " Delete empty trailing line 
    :normal dd 
endfunction 
map <leader>gR :call ShowRoutes()<cr> 
map <leader>gv :CommandTFlush<cr>\|:CommandT app/views<cr> 
map <leader>gc :CommandTFlush<cr>\|:CommandT app/controllers<cr> 
map <leader>gm :CommandTFlush<cr>\|:CommandT app/models<cr> 
map <leader>gh :CommandTFlush<cr>\|:CommandT app/helpers<cr> 
map <leader>gl :CommandTFlush<cr>\|:CommandT lib<cr> 
map <leader>gp :CommandTFlush<cr>\|:CommandT public<cr> 
map <leader>gs :CommandTFlush<cr>\|:CommandT public/stylesheets<cr> 
map <leader>gf :CommandTFlush<cr>\|:CommandT features<cr> 
map <leader>gg :topleft 100 :split Gemfile<cr> 
map <leader>gt :CommandTFlush<cr>\|:CommandTTag<cr> 
map <leader>f :CommandTFlush<cr>\|:CommandT<cr> 
map <leader>F :CommandTFlush<cr>\|:CommandT %%<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" SWITCH BETWEEN TEST AND PRODUCTION CODE 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! OpenTestAlternate() 
    let new_file = AlternateForCurrentFile() 
    exec ':e ' . new_file 
endfunction 
function! AlternateForCurrentFile() 
    let current_file = expand("%") 
    let new_file = current_file 
    let in_spec = match(current_file, '^spec/') != -1 
    let going_to_spec = !in_spec 
    let in_app = match(current_file, '\<controllers\>') != -1 || match(current_file, '\<models\>') != -1 || match(current_file, '\<views\>') != -1 || match(current_file, '\<helpers\>') != -1 
    if going_to_spec 
    if in_app 
     let new_file = substitute(new_file, '^app/', '', '') 
    end 
    let new_file = substitute(new_file, '\.e\?rb$', '_spec.rb', '') 
    let new_file = 'spec/' . new_file 
    else 
    let new_file = substitute(new_file, '_spec\.rb$', '.rb', '') 
    let new_file = substitute(new_file, '^spec/', '', '') 
    if in_app 
     let new_file = 'app/' . new_file 
    end 
    endif 
    return new_file 
endfunction 
nnoremap <leader>. :call OpenTestAlternate()<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" RUNNING TESTS 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! MapCR() 
    nnoremap <cr> :call RunTestFile()<cr> 
endfunction 
call MapCR() 
nnoremap <leader>T :call RunNearestTest()<cr> 
nnoremap <leader>a :call RunTests('')<cr> 
nnoremap <leader>c :w\|:!script/features<cr> 
nnoremap <leader>w :w\|:!script/features --profile wip<cr> 

function! RunTestFile(...) 
    if a:0 
     let command_suffix = a:1 
    else 
     let command_suffix = "" 
    endif 

    " Run the tests for the previously-marked file. 
    let in_test_file = match(expand("%"), '\(.feature\|_spec.rb\)$') != -1 
    if in_test_file 
     call SetTestFile() 
    elseif !exists("t:grb_test_file") 
     return 
    end 
    call RunTests(t:grb_test_file . command_suffix) 
endfunction 

function! RunNearestTest() 
    let spec_line_number = line('.') 
    call RunTestFile(":" . spec_line_number) 
endfunction 

function! SetTestFile() 
    " Set the spec file that tests will be run for. 
    let t:[email protected]% 
endfunction 

function! RunTests(filename) 
    " Write the file and run tests for the given filename 
    if expand("%") != "" 
     :w 
    end 
    if match(a:filename, '\.feature$') != -1 
     exec ":!script/features " . a:filename 
    else 
     " First choice: project-specific test script 
     if filereadable("script/test") 
      exec ":!script/test " . a:filename 
     " Fall back to the .test-commands pipe if available, assuming someone 
     " is reading the other side and running the commands 
     elseif filewritable(".test-commands") 
      let cmd = 'rspec --color --format progress --require "~/lib/vim_rspec_formatter" --format VimFormatter --out tmp/quickfix' 
      exec ":!echo " . cmd . " " . a:filename . " > .test-commands" 

      " Write an empty string to block until the command completes 
      sleep 100m " milliseconds 
      :!echo > .test-commands 
      redraw! 
     " Fall back to a blocking test run with Bundler 
     elseif filereadable("Gemfile") 
      exec ":!bundle exec rspec --color " . a:filename 
     " Fall back to a normal blocking test run 
     else 
      exec ":!rspec --color " . a:filename 
     end 
    end 
endfunction 


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" CtrlP Configuration 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$' 
let g:ctrlp_user_command = 'find %s -type f' 
let g:ctrlp_use_caching = 0 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" Md5 COMMAND 
" Show the MD5 of the current buffer 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
command! -range Md5 :echo system('echo '.shellescape(join(getline(<line1>, <line2>), '\n')) . '| md5') 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" OpenChangedFiles COMMAND 
" Open a split for each dirty file in git 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! OpenChangedFiles() 
    only " Close all windows, unless they're modified 
    let status = system('git status -s | grep "^ \?\(M\|A\|UU\)" | sed "s/^.\{3\}//"') 
    let filenames = split(status, "\n") 
    exec "edit " . filenames[0] 
    for filename in filenames[1:] 
    exec "sp " . filename 
    endfor 
endfunction 
command! OpenChangedFiles :call OpenChangedFiles() 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" InsertTime COMMAND 
" Insert the current time 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
command! InsertTime :normal a<c-r>=strftime('%F %H:%M:%S.0 %z')<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" FindConditionals COMMAND 
" Start a search for conditional branches, both implicit and explicit 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
command! FindConditionals :normal /\<if\>\|\<unless\>\|\<and\>\|\<or\>\|||\|&&<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" Diff tab management: open the current git diff in a tab 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
command! GdiffInTab tabedit %|vsplit|Gdiff 
nnoremap <leader>d :GdiffInTab<cr> 
nnoremap <leader>D :tabclose<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" RemoveFancyCharacters COMMAND 
" Remove smart quotes, etc. 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! RemoveFancyCharacters() 
    let typo = {} 
    let typo["“"] = '"' 
    let typo["”"] = '"' 
    let typo["‘"] = "'" 
    let typo["’"] = "'" 
    let typo["–"] = '--' 
    let typo["—"] = '---' 
    let typo["…"] = '...' 
    :exe ":%s/".join(keys(typo), '\|').'/\=typo[submatch(0)]/ge' 
endfunction 
command! RemoveFancyCharacters :call RemoveFancyCharacters() 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" Selecta Mappings 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" Run a given vim command on the results of fuzzy selecting from a given shell 
" command. See usage below. 
function! SelectaCommand(choice_command, selecta_args, vim_command) 
    try 
    silent let selection = system(a:choice_command . " | selecta " . a:selecta_args) 
    catch /Vim:Interrupt/ 
    " Swallow the ^C so that the redraw below happens; otherwise there will be 
    " leftovers from selecta on the screen 
    redraw! 
    return 
    endtry 
    redraw! 
    exec a:vim_command . " " . selection 
endfunction 

" Find all files in all non-dot directories starting in the working directory. 
" Fuzzy select one of those. Open the selected file with :e. 
nnoremap <leader>f :call SelectaCommand("find * -type f", "", ":e")<cr> 

function! SelectaIdentifier() 
    " Yank the word under the cursor into the z register 
    normal "zyiw 
    " Fuzzy match files in the current directory, starting with the word under 
    " the cursor 
    call SelectaCommand("find * -type f", "-s " . @z, ":e") 
endfunction 
nnoremap <c-g> :call SelectaIdentifier()<cr> 


colorscheme jellybeans 
highlight clear SignColumn 

autocmd BufNewFile,BufRead *.mobile.erb let b:eruby_subtype='html' 
autocmd BufNewFile,BufRead *.mobile.erb set filetype=eruby 
autocmd BufNewFile,BufRead .pryrc set filetype=ruby 

map <silent> <C-N> :silent noh<CR> 
map <silent> <C-T> :NERDTree <CR> 
map <silent> gb :Gblame<CR> 
map <silent> gc :Gcommit<CR> 
map <silent> gC :Gcommit -a<CR> 
map <silent> gl :gitv<CR> 
map <silent> gs :Gstatus<CR> 
map <silent> ws :EraseBadWhitespace<CR> 

"No arrow keys. :(
inoremap <Up>  <NOP> 
inoremap <Down> <NOP> 
inoremap <Left> <NOP> 
inoremap <Right> <NOP> 
noremap <Up>  <NOP> 
noremap <Down> <NOP> 
noremap <Left> <NOP> 
noremap <Right> <NOP> 
+2

要调试此问题,请使用'-u NONE'选项运行VIM(如果使用gvim则运行'-U NONE')。如果问题依然存在,那么你知道这不是你的配置。如果没有,那么你知道它是你的配置。如果问题出在您的配置中,请使用二进制搜索来找出问题所在(例如,注释掉一半配置文件并尝试它,继续评论并取消注释,直到找到违规项目为止) – verdammelt

+0

它不会保留-u无,我会尝试按照你的建议平分。 – Senjai

+0

我很高兴它是帮助;这是一个调试任何问题的有用方法。 – verdammelt

回答

4

我添加了一条评论,然后注意到你的vimrc文件最底部显示我是正确的。罪魁祸首是

:map <silent> ws :EraseBadWhitespace<CR> 

:help map-modes,该:map命令适用于普通,可视,选择和操作符等待模式。在键入c后,vim进入操作员等待模式,然后等待查看您是否想要w或者您打算添加s。另请参阅

:help 'timeout' 
+0

非常感谢!这节省了我很多时间。我刚回到我的一个系统开始插入,这确实是问题所在 – Senjai