使MidMouse在Vim中切换以插入(粘贴),粘贴,然后转义

时间:2018-03-29 17:05:46

标签: vim paste

我正在使用连接到CentOS 7MobaXterm的Windows计算机。我希望鼠标中键在Vim 7.4(没有剪贴板选项编译)中工作,就像在linux命令行上一样,它将从我的Windows剪贴板粘贴。

在我的~/.vimrc

nnoremap <MiddleMouse> :set paste<cr>:startinsert<MiddleMouse><esc>

起初,我担心这可能不会达到我的预期,因为我可能不理解Vim如何进行递归,所以我尝试使用 Shift + Insert ,因为这就是MiddleMouse为了粘贴而映射的内容:

nnoremap <MiddleMouse> :set paste<cr>:startinsert<S-Insert><esc>

这会产生关于E488: Trailing characters的错误。

编辑:正如克里斯蒂安指出的那样,我在<cr>命令之后错过了:startinsert,但这仍然无法解决我的问题。

nnoremap <MiddleMouse> :set paste<cr>:startinsert<cr><S-Insert><esc>

将不再出现错误,但在粘贴之前它不会进入insert模式。

1 个答案:

答案 0 :(得分:0)

这显然是预期的行为(呃)。

:star[tinsert][!]   Start Insert mode just after executing this command.
                    Works like typing "i" in Normal mode.  When the ! is
                    included it works like "A", append to the line.
                    Otherwise insertion starts at the cursor position.
                    Note that when using this command in a function or
                    script, the insertion only starts after the function
                    or script is finished.
                    This command does not work from :normal.

这意味着我在:startinsert之后放置的所有命令都会在:startinsert之前运行,然后:startinsert运行并更改要插入的模式(注意:这似乎是保持使用i代替:startinsert也是如此。

我的下一步是尝试创建一个嵌套函数,其中我有一个函数调用另一个函数,第二个函数运行:startinsert然后返回第一个函数,然后完成粘贴: / p>

function! Paste()
  call InsertMode()<cr>
  :set paste<cr>
  <S-Insert>
  :set nopaste<cr>
  <esc>
endfunction
function! InsertMode()
  :startinsert<cr>
endfunction
nnoremap <MiddleMouse> call Paste()<cr>

但这也不起作用。我也尝试使用"+p"*p寄存器而不是:startinsert正如克里斯蒂安在他对nnoremap <MiddleMouse> :set paste<cr>"+p:set nopaste<cr>的评论中所说的那样,但这又是直接粘贴,就好像我在输入它一样,它不会先进入insert模式。我愿意相信这将适用于使用+剪贴板编译的Vim版本,但这不是我的版本。

我能做的最好的事情就是在进入insert模式后使用MiddleMouse按钮正确粘贴:

inoremap <MiddleMouse> :set paste<cr><S-Insert>:set nopaste<cr>

如果有人知道从normal模式执行此操作的方法,请告知我们。看起来它应该是可能的,但我读过的所有内容都表明没有+clipboard选项(可以vim --version | grep clipboard检查)它不是。