本文正在参与「金石方案 . 分割6万现金大奖」
前言
- 前阵子我研讨了
tmux
, 也凭借插件完结了tmux
和体系剪切板之间的打通,当然还是需要装置xsel
或许xclip
的。 可是跟着深化使用之后发现neovim
中也存在仿制的问题,要知道当neovim
和tmux
作为我的主要工作流,仿制就必须打通,今日咱们来完结打通体系剪切板第二章—neovim仿制张贴。
neovim仿制张贴
- 我的
mac
上之前装置的neovim
和tmux
,不知道是不是mac体系的原因,neovim
中仿制张贴是打通了体系剪切板的。可是在ubuntu18.04.6
中却不能。并且我百度搜索了一下neovim
默认是不支持体系剪切板的。想要实现体系的剪切仿制就必须使用"+y
进行仿制,"+p
进行张贴 。个人觉得这样操作很是费事,我想要的就是y
仿制 ,p
张贴。 - 为什么仿制不是通用的呢?主要
vim
考虑数据紊乱的情况吧。在vim
中一共拥有12中类型的剪切板, 咱们翻开vim
或许nvim
,输入:reg
就可以看到当前的剪切板上的内容了。
- 就像上面那种情况相同 , 红框圈中的表明经过输入对应字符后在按
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 ;;
esac
exit $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 "$@"
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
咋办呢? 也是相同的装备 ,由于我现已转neovim
了vim
装备就没有尝试了。你可以自己尝试下。
- 最后建议在
init.vim
中添加set clipboard+=unnamedplus
这段装备,经过测试有没有这段装备都不会影响打通体系剪切板的。
本文正在参与「金石方案 . 分割6万现金大奖」