Vim粘贴格式错乱解决方法
有问题就解决!
两种方法解决
:set paste法
在粘贴的时候,先进入set paste模式,然后再输入i
进入编辑,这样就能解决了
:set paste
1
vim教程网给我们做了一个不错的动图。
也可以在你的vimrc中,增加这行代码:
set pastetoggle=<F3> # 按F3进入粘贴模式
autocmd InsertLeave * set nopaste # 退出插入模式后自动关闭粘贴模式
1
2
2
Vim命令
autocmd
用于指示 Vim 监听某一类事件,一旦该事件发生,Vim 将执行指定的命令。
InsertLeave
表示 离开插入模式 事件。如Vim粘贴文本格式错乱介绍,paste
选项可避免粘贴文本到Vim中出现格式错乱。但是该选项会使得autoindent
等选项失效。
所以一般只有在 Vim 插入模式下才会启用
paste
选项,退出插入模式后关闭对应功能。
以下设置可完成上述功能,保证退出 Vim 插入模式后自动关闭 paste
选项。
这样的话,你只要按F3即可进入粘贴模式。F3也可以换成你喜欢的其他键。 有时候需要取消粘贴模式的话,你也可以输入:
set nopaste
1
来取消粘贴模式。
无插件设置法
有时候插件放在github,这个时候我们无法安装插件,可以将下列代码直接复制进入你的vimrc配置里。
" Code from:
" http://stackoverflow.com/questions/5585129/pasting-code-into-terminal-window-into-vim-on-mac-os-x
" then https://coderwall.com/p/if9mda
" and then https://github.com/aaronjensen/vimfiles/blob/59a7019b1f2d08c70c28a41ef4e2612470ea0549/plugin/terminaltweaks.vim
" to fix the escape time problem with insert mode.
"
" Docs on bracketed paste mode:
" http://www.xfree86.org/current/ctlseqs.html
" Docs on mapping fast escape codes in vim
" http://vim.wikia.com/wiki/Mapping_fast_keycodes_in_terminal_Vim
if exists("g:loaded_bracketed_paste")
finish
endif
let g:loaded_bracketed_paste = 1
let &t_ti .= "\<Esc>[?2004h"
let &t_te = "\e[?2004l" . &t_te
function! XTermPasteBegin(ret)
set pastetoggle=<f29>
set paste
return a:ret
endfunction
execute "set <f28>=\<Esc>[200~"
execute "set <f29>=\<Esc>[201~"
map <expr> <f28> XTermPasteBegin("i")
imap <expr> <f28> XTermPasteBegin("")
vmap <expr> <f28> XTermPasteBegin("c")
cmap <f28> <nop>
cmap <f29> <nop>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
代码作用:
您需要使用支持 方括号粘贴模式 的现代xterm兼容终端仿真器 。 已知xterm,urxvt,iTerm2,gnome-terminal(以及其他使用libvte的终端)都可以工作。
然后,每当你在 插入模式 ,并使用粘贴到你的终端仿真器
command+v
,shift+insert
,ctrl+shift+v
或者middle-click
,VIM将自动:set paste
为您服务。
有插件设置法
cd ~/.vim/bundle # 切换到你的插件目录
git clone https://github.com/ConradIrwin/vim-bracketed-paste
1
2
2