一直遇到一个比较困扰的关于 vim 使用的小问题,autoindent 功能很好用,方便写代码, 但是,当需要从外面粘贴代码到 vim 时,却发现格式会乱掉,例如:

本来是想粘贴

function! StartUp()
    if 0 == argc()
        NERDTree
    end
endfunction

autocmd VimEnter * call StartUp()

粘贴后却发现是

function! StartUp()
    if 0 == argc()
            NERDTree
                end
                endfunction

                autocmd VimEnter * call StartUp()

非常困扰,如果只有 2-3 行还好,但是如果行数比较多,再格式化起来就比较麻烦了, 虽然,可以使用一些代码格式化工具。

最好的办法当然是让 vim 保持原来的格式。

要做到这一点,需要使用命令告诉 vim 进入 paste 模式。

:set paste

然后,粘贴代码,这样就不会乱掉了,粘贴完成后,使用命令

:set nopaste

切换回来,否则很多方便编码的功能就被禁掉了,例如:autoindent。

为了更方便,可以给上面的 paste 模式切换配置快捷键,将下面几行添加到 ~/.vimrc, 或者 ~/.vimrc.local(spf13-vim) 中。

" for paste mode
nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode

详细的使用说明参考 vim 官方文档