本文正在参与「金石方案 . 分割6万现金大奖」

前言

  • 前阵子我研讨了 tmux , 也凭借插件完结了 tmux 和体系剪切板之间的打通,当然还是需要装置 xsel 或许 xclip 的。 可是跟着深化使用之后发现 neovim 中也存在仿制的问题,要知道当 neovimtmux 作为我的主要工作流,仿制就必须打通,今日咱们来完结打通体系剪切板第二章—neovim仿制张贴。

neovim仿制张贴

  • 我的 mac 上之前装置的 neovimtmux ,不知道是不是mac体系的原因,neovim中仿制张贴是打通了体系剪切板的。可是在ubuntu18.04.6 中却不能。并且我百度搜索了一下 neovim 默认是不支持体系剪切板的。想要实现体系的剪切仿制就必须使用 "+y 进行仿制,"+p进行张贴 。个人觉得这样操作很是费事,我想要的就是 y仿制 , p 张贴。
  • 为什么仿制不是通用的呢?主要 vim 考虑数据紊乱的情况吧。在 vim 中一共拥有12中类型的剪切板, 咱们翻开 vim 或许 nvim ,输入:reg 就可以看到当前的剪切板上的内容了。

vim 打通系统剪切板 | 配合 tmux 实现处处通

  • 就像上面那种情况相同 , 红框圈中的表明经过输入对应字符后在按p就可以进行张贴了。比如我想仿制 "" 剪切板上的内容,那么咱们一共需要按下 ""p 即可仿制。至于这12平分别是啥,分别是什么前缀我都不关心,由于我只想只用体系剪切板 "+p" ,这就是体系剪切板。

为什么neovim不能像vim相同yp仿制张贴呢

  • 上面咱们提到了12中寄存器, 可是遗憾的是 neovim 中不支持 + * 两种寄存器。这就导致咱们无法完结仿制张贴到体系剪切版上。
#!/bin/bash
# Taken and modified from https://github.com/agriffis/skel/blob/master/neovim/bin/clipboard-provider
#
# clipboard provider for neovim
#
# :help provider-clipboard#exec 2>> ~/clipboard-provider.out
#set -x
​
: ${COPY_PROVIDERS:=tmux pb xclip osc52 local}
: ${PASTE_PROVIDERS:=xclip pb tmux local}
: ${TTY:=`(tty || tty </proc/$PPID/fd/0) 2>/dev/null | grep /dev/`}
​
LOCAL_STORAGE=$HOME/.clipboard-provider.out
​
main() {
   declare buffer status=1
​
   case $1 in
     copy)
      buffer=$(base64 | tr -d '\n')
       internal() { base64 --decode <<<"$buffer"; }
      for p in $COPY_PROVIDERS; do
         internal | $p-provider copy && status=0
      done ;;
     paste)
      for p in $PASTE_PROVIDERS; do
        $p-provider paste && status=0 && break
      done ;;
  esacexit $status
}
​
is-copy() {
  if [[ "$1" == "copy" ]]; then return 0; else return 1; fi
}
​
tmux-provider() {
   [[ -n $TMUX ]] || return `is-copy "$@"`
   case $1 in
     copy) internal | tmux load-buffer - ;;
     paste) tmux save-buffer - ;;
  esac
}
​
pb-provider() {
  if ! command -v pbcopy &>/dev/null;then return $(is-copy $1); fi
   case $1 in
     copy) internal | pbcopy ;;
     paste) pbpaste ;;
  esac
}
​
osc52-provider() {
  # HACK: this ignores stdin and looks directly at the base64 buffer
   case $1 in
     copy) [[ -n "$TTY" ]] && printf $'\e]52;c;%s\a' "$buffer" > "$TTY" ;;
     paste) return 1 ;;
  esac
}
​
local-provider() {
   case $1 in
     copy) internal > $LOCAL_STORAGE ;;
     paste) cat $LOCAL_STORAGE && return 0;;
  esac
}
​
xclip-provider() {
  if ! command -v xclip &>/dev/null;then return $(is-copy $1); fi
   case $1 in
     copy) internal | xclip -i -selection clipboard;;
     paste) xclip -o -selection clipboard;;
  esac
}
​
main "$@"
  • 上面是 github 上大佬提供的脚本, 我稍作一处小小改动,咱们只需要将脚本放到 /usr/bin 或许装备到环境变量中即可 。
  • 完结上述装备理论上你将可以经过如下方式测试
echo "hello world" | clipboard-provider copy
  • 经过在终端输入如下指令,再去其他地方进行 Ctrl + V 你就会发现出来的是 hello world 表明咱们完结了体系剪切板的装备。

neovim装备打通剪切板

  • 有了上述的脚本咱们仅仅是完结了经过指令仿制内容到体系剪切板上。可是想要 neovim 上经过 yp 仿制张贴还需要最后一步 。在咱们的 neovim 主装备文件入口,正常情况是init.vim
 if executable('clipboard-provider')
 let g:clipboard = {
     \ 'name': 'myClipboard',
     \   'copy': {
     \     '+': 'clipboard-provider copy',
     \     '*': 'clipboard-provider copy',
     \   },
     \   'paste': {
     \     '+': 'clipboard-provider paste',
     \     '*': 'clipboard-provider paste',
     \   },
     \ }
endif
  • 装备完结之后退出重新经过 nvim 翻开,这个时候咱们就打通的体系剪切板了。你可能会说 vim 咋办呢? 也是相同的装备 ,由于我现已转 neovimvim 装备就没有尝试了。你可以自己尝试下。
  • 最后建议在 init.vim 中添加 set clipboard+=unnamedplus 这段装备,经过测试有没有这段装备都不会影响打通体系剪切板的。

本文正在参与「金石方案 . 分割6万现金大奖」