如何将当前寄存器的内容放入vimscript中的新缓冲区?

时间:2019-07-17 20:06:17

标签: vim

我试图映射我的F7键以执行以下操作:获取当前寄存器并将其放入一个新文件中,该文件将以拆分方式打开:

 map <F7> :sp clipboard.txt<CR> <bar> :put

第一部分起作用:我在拆分视图中获得了一个名为“ clipboard.txt”的新缓冲区,但是没有放置任何文本。如果我手动在缓冲区中键入:put,寄存器将按预期放置。

如何编写此看跌期权的脚本?

1 个答案:

答案 0 :(得分:3)

有两种解决方法,您可以在每个命令后使用<cr>,也可以在多个命令之间使用<bar>,最后使用最后的<cr>。请注意,您需要在末尾使用<cr>,否则Vim只会在命令行中键入命令并将其保留在那里,等待您按Enter。

此外,您应该使用nnoremap,首先使映射成为非递归的(例如,如果您重新映射:键,它将中断),其次使它在正常模式下工作,我想这是要的。

将它们放在一起:

nnoremap <F7> :split clipboard.txt<cr>:put<cr>

或者:

nnoremap <F7> :split clipboard.txt<bar>put<cr>

您可能希望通过以下方式使该映射更加健壮和有用:

  • 删除粘贴内容之前的第一行;
  • 确保删除操作不会影响用于粘贴的默认寄存器(通过使用_黑洞寄存器)
  • 禁止:split:put命令的输出;和
  • 使映射本身静音。

结果:

nnoremap <silent> <F7> :silent split clipboard.txt<bar>silent put<bar>1delete _<cr>