Vim以粘贴模式重新映射

时间:2016-09-04 12:45:03

标签: vim paste remap

是否有可能在粘贴模式下重新映射。

例如,我在jk的插入模式下将<ESC>重新映射到inoremap jk <esc>,因此我可以轻松退出正常模式。但是当我使用:pastetoggle处于粘贴模式时,我的重新映射不再有效。我查找了:help map-modes的帮助,但找不到与粘贴模式相关的任何内容。

4 个答案:

答案 0 :(得分:4)

来自:help 'paste'

[...]
When the 'paste' option is switched on (also when it was already on):
        - mapping in Insert mode and Command-line mode is disabled
[...] 

答案 1 :(得分:0)

重映射无法在粘贴模式下工作的一个解决方法是使用vim-unimpaired&lt; kbd> y o 和< kbd> y O 要粘贴的命令。至少这种方式保留带有粘贴设置的插入模式也会设置nopaste,当你不想这么做时,你不会发现自己处于粘贴模式。

答案 2 :(得分:0)

这可能对你有帮助。它没有帮助我,因为我使用 GNU screen 并且它不支持括号内的 xterm 粘贴转义码

(来自https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode

:inoremap jj <esc>
:inoremap jk <esc>
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

" This resets paste mode after insert
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  echo "DONE"
  return ""
endfunction

答案 3 :(得分:0)

这是我发现的另一种方法。当您按 Esc 键离开插入模式时,它会自动关闭粘贴模式。颜色还可以帮助您了解自己处于哪种模式。hth。

import "message.proto";
import "google/protobuf/wrappers.proto";

service Service {
    rpc request (Request) returns (.google.protobuf.BoolValue); 
}