如果您不想设置 X 服务器,此方法将允许您使用 Windows 附带的 clip.exe 程序将选定的文本复制到剪贴板。
下面的代码sn-ps可以放在你的.vimrc文件中。
首先创建一个辅助函数,它将当前选定的文本作为字符串返回。我们可以使用此函数将突出显示的文本通过管道传输到clip.exe:
func! GetSelectedText()
normal gv"xy
let result = getreg("x")
return result
endfunc
system 函数将允许我们调用本机程序并将参数传递给它们。下面的 sn -p 设置了两个键映射;第一行将允许 Ctrl+C 用于复制文本,第二行将允许 Ctrl+X用于剪切文本:
noremap <C-C> :call system('clip.exe', GetSelectedText())<CR>
noremap <C-X> :call system('clip.exe', GetSelectedText())<CR>gvx
将更改保存到您的 .vimrc 文件后,您应该可以开始了。
如果您要在多个系统上使用.vimrc,我建议将这些映射包装在if 语句中以检查clip.exe 是否确实存在:
if !has("clipboard") && executable("clip.exe")
noremap <C-C> :call system('clip.exe', GetSelectedText())<CR>
noremap <C-X> :call system('clip.exe', GetSelectedText())<CR>gvx
endif
如果 Vim 可以直接访问系统剪贴板,上述内容也将允许 Vim 忽略这些键绑定。
您可能还想在 vim 确实可以访问剪贴板时添加键绑定,如下所示:
if has("clipboard")
vnoremap <C-X> "+x
vnoremap <S-Del> "+x
vnoremap <C-C> "+y
vnoremap <C-Insert> "+y
map <C-V> "+gP
map <S-Insert> "+gP
cmap <C-V> <C-R>+
cmap <S-Insert> <C-R>+
endif
如果您在 Windows 上使用本机 Vim 或在 Linux 系统上使用 vim-gtk,这将派上用场。