直接從 linux command line 的 stdin 複製資料
July 1, 2021•150 words
從 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 $', '', '')