Vim 有一个很棒的粘贴模式,其中缩写和映射被忽略。令人沮丧的是,即使是不映射到可粘贴 ASCII 字符的键(例如功能键),也会按字面意思粘贴。例如,键 F2 被粘贴为<F2>
。有什么办法可以解决这个问题吗?
请注意,pastetoggle
实际上可以将其映射到功能键以轻松退出粘贴模式,但是我正在编写的函数在进入或退出粘贴模式时会更改其他值(例如启用或禁用行号和其他内容)。因此,我真的很想找到一种解决方法。
作为参考,这是该功能的当前版本(卡在粘贴模式):
iab if if<Space>(<Space>{{<Esc>kA<Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
" Triple-toggle Insert Modes: coding, prose, and paste
let g:insertModeGlobal=1
function! Te()
if g:insertModeGlobal==3
" Was in paste insert mode, go to coding insert mode
set nu
set nopaste
let g:insertModeGlobal=4
endif
if g:insertModeGlobal==2
" Was in prose insert mode, go to paste insert mode
set nolinebreak
nnoremap j j
nnoremap k k
nnoremap gj gj
nnoremap gk gk
set relativenumber
execute ":Signs"
iab if if<Space>(<Space>{{<Esc>kA<Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
set nonu
set paste
let g:insertModeGlobal=3
endif
if g:insertModeGlobal==1
" Was in coding insert mode, go to prose insert mode
set linebreak
nnoremap j gj
nnoremap k gk
nnoremap gj j
nnoremap gk k
set number
execute ":DisableSigns"
iab if if
let g:insertModeGlobal=2
endif
if g:insertModeGlobal==4
let g:insertModeGlobal=1
endif
endfunction
答案1
粘贴模式不适合长时间打字。它的存在只是为了克服 Vim 在终端中运行时的长期限制。除了使用鼠标中键粘贴文本外,您不应将其用于任何其他用途。
这就是set pastetoggle="<F12>"
存在的原因:想要粘贴某些内容?点击<F12>
进入粘贴模式,粘贴,<F12>
再次点击退出粘贴模式。
或者,如果您的 Vim 版本支持,请使用"*p
或。"+p