直接從 linux command line 的 stdin 複製資料

從 stdin 複製資料

下載下面程式

https://chromium.googlesource.com/apps/libapps/+/master/hterm/etc/osc52.sh

之後就可以透過將資料丟到 hterm-copy 的 stdin,terminal emulator 則會自動複製資料

執行下面指令

sudo curl https://raw.githubusercontent.com/kjelly/auto_config/master/roles/mybin/files/mybin/hterm-copy.sh -o /usr/bin/hterm-copy

之後就可以透過將資料丟到 hterm-copy 的 stdin,系統則會自動複製資料

和 vim 整合

如果想要和 vim(or neovim) 做整合,則執行下面動作

  • 下載 https://raw.githubusercontent.com/kjelly/auto_config/master/roles/vim/files/clipboard-provider
  • 確保 clipboard-provider 可被執行
  • 在你的 vimrc 加入以下程式碼
  let g:clipboard = {
        \ 'name': 'myClipboard',
        \     'copy': {
        \         '+': 'clipboard-provider copy',
        \         '*': 'env COPY_PROVIDERS=tmux clipboard-provider copy',
        \     },
        \     'paste': {
        \         '+': 'clipboard-provider paste',
        \         '*': 'env COPY_PROVIDERS=tmux clipboard-provider paste',
        \     },
        \ }

完成上述動作後,即可透過 "+yy 來執行複製。

你也可以新增下述快速鍵,來方便複製資料

nnoremap YY "+yy
nnoremap Y "+y
vnoremap Y "+y

在 neovim teminal 也可以從 stdin 複製資料

原始的 osc52.sh 不支援在 neovim terminal 下,透過 stdin 複製資料。所以我改寫程式,讓 osc52.sh 支援此功能(不過也因此只支援在 tmux 下複製資料)。

執行下面指令

sudo curl https://raw.githubusercontent.com/kjelly/auto_config/master/roles/mybin/files/mybin/hterm-copy.sh -o /usr/bin/hterm-copy

之後就可以透過將資料丟到 hterm-copy 的 stdin,系統則會自動複製資料

要在 neovim terminal 下複製資料,還需要在 vimrc 新增 let $HTERM_TTY=substitute(system("tty < /proc/" . getpid() . "/fd/0"), \n $', '', '')


You'll only receive email when they publish something new.

More from kjelly
All posts