tmuxとシステムクリップボードの両方を使用するようにvimを設定する

tmuxとシステムクリップボードの両方を使用するようにvimを設定する

私はvimに初めて接しましたので(現在vimを使用していますnvim)私の知識不足をご容赦ください。多くの質問が私と似ていますが、まったく同じではありません。

私はこれが欲しい:

  • vimデフォルトは、システムクリップボードではなくバッファに切り取り/コピーすることです。
  • vim他のレジスタ(私の考えでは、そうであれば+訂正してください*!)はシステムクリップボードに移動する必要があります。

私はいくつかの調査をしましたが(今まで)何もうまくいきませんでした。

情報:

  • 私が使用するのはこのようにバッファtmuxにプッシュすることです。tmux
  • 家にいないので今使っていtermuxます。termux-clipboard-get/set

私の状況に効果があると思う方法は次のとおりです。

let g:clipboard = {
  \   'name': 'TmuxTermux',
  \   'copy': {
  \      '*': ['tmux', 'load-buffer', '-'],
  \      '+': ['termux-clipboard-set'],
  \    },
  \   'paste': {
  \      '*': ['tmux', 'save-buffer', '-'],
  \      '+': ['termux-clipboard-get'],
  \   },
  \   'cache_enabled': 1,
  \ }

カット/コピーすると、バッファtmuxvimコンテンツを共有します。完璧です! (ほとんど...)+しかし、システムクリップボードを使用するためにバッファを使用することはできません。 「+」を押すとカーソルが1行下に移動し、上記の順序を変更すると(代わりにtermux-clipboard-get/setレジスタを作成する)、クリックするとカーソルがある単語のすべてのインスタンスが強調表示されます。*+*

読みながら、次のことを楽しみにしています。

  • デフォルトではレジスタがvim使用されます*が、これはtmuxバッファに正常に登録しdd/yyて貼り付けますptmuxまたは[PREFIX]+[p]
  • 別のレジスタ(システムクリップボード)に切り取り/コピー/貼り付けをしたい場合は、貼り付け(でも)を+使用しますが、機能しません。+dd/+yy+p*dd/*yy/*p

質問:

上記のように+カーソルを1行下に移動してRegisterに変更すると、現在の単語とその単語が表示される他の項目が強調表示されます**

もっと経験のある方にお詫び申し上げます。ちょっと体験しましたemacs(とても痛いですね!:)

ベストアンサー1

私はvimとtmuxを使用しており、システムクリップボードで作業しています。以下があります。

" copy and paste with clipboard  
                                                                                                                                                        
" paste from system CTRL-C clipboard                                                                                                                                                                                                      
nnoremap <Leader>p "+p                                                                                                                                                                                                                    
" paste from system highlighted clipboard                                                                                                                                                                                                  
nnoremap <Leader>P "*p                                                                                                                                                                                                                    
" copy contents of unnamed register to system CTRL-C clipboard                                                                                                                                                                            
nnoremap <silent><Leader>y :call Preserve("normal! Gp\"+dGu")<cr>                                                                                                                                                                         
            \ :echo 'copied to CTRL-C clipboard'<cr>                                                                                                                                                                                      
" copy contents of unnamed register to system highlghted clipboard                                                                                                                                                                        
nnoremap <silent><Leader>Y :call Preserve("normal! Gp\"*dGu")<cr>                                                                                                                                                                         
            \ :echo 'copied to highlight clipboard'<cr>             

<Leader> yと<Leader> Yを使用すると、vimの名前のないレジスタからシステムクリップボードに内容をインポートできます。これら2つの再マッピングは、次の関数に依存します(.vimrcで再マッピングする前に表示する必要があります。)

" run a command, but put the cursor back when it's done                                                                                                                                                                                       
function! Preserve(command)                                                                                                                                                                                                                   
    " Preparation: save last search, and cursor position.                                                                                                                                                                                     
    let _s=@/                                                                                                                                                                                                                                 
    let l = line(".")                                                                                                                                                                                                                         
    let c = col(".")                                                                                                                                                                                                                          
    " Do the business:                                                                                                                                                                                                                        
    execute a:command                                                                                                                                                                                                                         
    " Clean up: restore previous search history, and cursor position                                                                                                                                                                          
    let @/=_s                                                                                                                                                                                                                                 
    call cursor(l, c)                                                                                                                                                                                                                         
endfunction        

参考までに、私は次のことをテストするのに多くの時間を費やしていませんでしたが、(Linux)ホストとホスト(クライアントではない)のtmuxセッションにsshを接続すると、これらの再マッピングが時々発生することがわかりました。ホストvimの名前のないレジスタからデータを取得できるようです。クライアントのシステムクリップボードにコピーされます(その逆も同様です)。このように行動するのが良いのに、たまに二人が話さないことがあるのに、なぜそんなのか分からない。

とにかく誰かに役立つことを願っています!

おすすめ記事