我正在使用连接到CentOS 7
到MobaXterm
的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
模式。
答案 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
检查)它不是。