我最近开始使用 vim/gvim,遇到了一个非常烦人的问题:在插入模式下,每当我输入一个字符,行末的光标就会闪烁。
看一下这个视频你就会明白我的意思。https://www.youtube.com/watch?v=LT3yGiXONYk
当我使用空白 .vimrc 启动 gvim 时,我没有遇到此问题。我禁用了所有插件,然后开始逐个重新启用它们。我不知道是否有一个插件导致了这个问题。
看起来所有插件加在一起对 vim 的性能有很大的影响。
set encoding=utf-8
set fileencoding=utf-8
set shell=/bin/bash
set t_Co=256
set t_ut=
syntax on
set number
set guioptions-=m " No menu bar
set guioptions-=T " No tool bar
set guioptions-=r " No right-hand scroll bar
set guioptions-=L " No left-hand scroll bar
set autoindent " Automatic indentation
set smarttab
set showmatch " Show matching brackets
set ignorecase " Ignore case when searching
set hlsearch " Highlight search terms
set incsearch " Show search matches while typing
set title " Change terminal title
set pastetoggle=<F2> " Enable easy pasting
set nocompatible " Set some better better defaults
set laststatus=2 " Always display status line
" Neccessary for installing vundle
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Bundle 'gmarik/vundle'
Bundle 'bling/vim-airline'
Bundle 'vim-scripts/sudo.vim'
Bundle 'tpope/vim-fugitive'
Bundle 'altercation/vim-colors-solarized'
Bundle 'snipMate'
Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}
Bundle 'Lokaltog/vim-easymotion'
Bundle 'kien/ctrlp.vim'
Bundle 'tpope/vim-surround'
Bundle 'tomasr/molokai'
Bundle 'Align'
Bundle 'plasticboy/vim-markdown'
Bundle 'slim-template/vim-slim.git'
Bundle 'scrooloose/nerdtree'
Bundle 'scrooloose/syntastic'
Bundle 'vim-scripts/netrw.vim'
Bundle 'kchmck/vim-coffee-script'
Bundle 'bogado/file-line'
Bundle 'wting/rust.vim'
Bundle 'cespare/vim-toml'
Bundle 'lambdatoast/elm.vim'
Bundle 'tyru/restart.vim'
Bundle 'danro/rename.vim'
Bundle 'tpope/vim-rbenv'
Bundle 'tpope/vim-rails'
Bundle 'tpope/vim-eunuch'
Bundle 'tpope/vim-commentary'
Bundle 'tpope/vim-sleuth'
Bundle 'chase/vim-ansible-yaml'
Bundle 'jdonaldson/vaxe'
Bundle 'Hackerpilot/DCD', {'rtp': 'editors/vim'}
Bundle 'sollidsnake/vterm'
Bundle 'airblade/vim-gitgutter'
Bundle 'bufkill.vim'
Bundle 'tpope/vim-vividchalk'
Bundle 'rking/ag.vim'
call vundle#end()
filetype plugin indent on
colorscheme molokai
" airline
let g:airline_theme="dark"
let g:airline#extensions#tabline#enabled = 1
let g:airline_powerline_fonts=1
let g:airline_enable_fugitive=1
" Custom keybindings
nmap <Tab><Tab> :NERDTreeToggle<CR>
nnoremap <C-Tab> :bnext<CR>
nnoremap <C-S-TAB> :bprevious<CR>
map / <Plug>(easymotion-sn)
omap / <Plug>(easymotion-tn)
map n <Plug>(easymotion-next)
map N <Plug>(easymotion-prev)
" File type specific settings
autocmd FileType ruby setlocal ts=2 sts=2 et sw=2
autocmd FileType python setlocal ts=4 sts=4 et sw=4
autocmd FileType yaml setlocal ts=2 sts=2 et sw=2
autocmd FileType javascript setlocal ts=4 sts=0 noet sw=4
au BufRead,BufNewFile *.md set filetype=markdown
au BufRead,BufNewFile *.cson set filetype=coffee
set backup
set backupdir=~/.vim/backup
set directory=~/.vim/tmp
set tags=./tags
有没有办法分析 vim(不谈启动时间)?你知道是什么原因造成的吗?
答案1
我认为你最好的选择是按照以下程序进行调试类似问题,复制如下:
您可以按照以下步骤操作Vim 常见问题解答 2.5.相关部分如下:
2.5. 我在使用 Vim 时遇到了“xyz”(一些)问题。我如何确定这是我的设置问题还是 Vim 的问题?/ 我是否在 Vim 中发现了错误?
首先,您需要查明错误是出在实际的运行时文件中,还是出在与 Vim 一起分发的任何插件中,或者它是否是 .vimrc 或 .gvimrc 中任何配置选项的简单副作用。因此,首先,像这样启动 vim:
vim -u NONE -U NONE -N -i NONE
这将以不兼容模式(-N)启动 Vim,而不会读取 viminfo 文件(-i NONE),不会读取任何配置文件(-u NONE 表示不读取 .vimrc 文件,-U NONE 表示不读取 .gvimrc 文件)甚至插件。
如果以这种方式启动 Vim 时没有出现错误,则问题可能与您的某个插件或某个本地设置文件中的某些设置有关。您需要找出导致错误的原因,请尝试以这种方式启动 Vim:
vim -u NONE -U NONE -N
如果出现错误,则问题出在您的 .viminfo 文件上。只需删除 viminfo 文件即可。如果没有出现错误,请尝试:
vim -u ~/.vimrc --noplugin -N -i NONE
这将仅使用您的 .vimrc 作为配置文件,但不加载任何插件。如果这次出现错误,则错误可能是由 .vimrc 文件中的某些配置选项引起的。根据 vimrc 文件的长度,在该文件中追踪来源可能非常困难。
最好的方法是在 .vimrc 的中间添加 :finish 命令。然后使用相同的命令行重新启动。如果错误仍然发生,则该错误一定是由于 .vimrc 前半部分的设置引起的。如果没有发生,则有问题的设置一定在 .vimrc 的后半部分。因此,将 :finish 命令移动到您知道会触发错误的那一半的中间,然后继续操作,直到找到有问题的选项。如果您的 .vimrc 长 350 行,则最多需要 9 次尝试才能找到有问题的行(实际上,这通常可以进一步减少,因为通常行相互依赖)。
如果问题没有发生,当仅加载 .vimrc 文件时,错误一定是由插件或其他运行时文件(缩进自动加载或语法脚本)引起的。检查 :scriptnames 命令的输出以查看已加载的文件,并尝试逐个禁用每个文件,看看哪个文件触发了错误。通常,vim 加载的文件有一个简单的配置变量来禁用它们,但您需要分别检查每个文件。
如果上述步骤不能解决问题,则链接上还有其他信息。
答案2
看起来有些自动命令正在干扰。也许是 git-gutter,它会尝试检查缓冲区是否已更改?所以请检查您的自动命令。我会特别检查 TextChanged 或 CursorMovedI 自动命令。或者,您可以尝试通过设置选项来禁用选择性自动命令eventignore
。(您也可以将其设置为all
禁用所有自动命令。)另一个选择是将verbose
选项设置为某个值,然后查看在插入模式下输入时是否会弹出某些内容。
如果这没有帮助,您需要参考之前引用的常见问题解答。
请参阅帮助
:h 'eventignore'
:h 'verbose'
:h 'verbosefile'
答案3
此行为是由插件中的错误引起的vim-airline
。我启用后也遇到了同样的问题vim-airline
,并且根据你的说法,.vimrc
你使用的是同一个插件。
A对应问题已在vim-airline
存储库中创建。欢迎随意评论并添加有关该问题的详细信息,以便作者可以修复该错误。