web-dev-qa-db-ja.com

名前のないレジスタでVim + Tmuxのヤンク/貼り付けを修正

Tmuxセッション内でvimを使用している間、名前のないレジスタにヤンクしたり貼り付けたりできません。名前付きレジスタに移動しても問題なく機能しますが、名前のないレジスタは機能しません。

エラーは:

E353: Nothing in register *

Tmuxがない場合、vimは現在の設定を使用して正常に動作します。使用できるように修正するにはどうすればよいですか y それから p エラーなしで、レジスタを指定せずに?

65
Jason

エラーメッセージ(_Nothing in register *_)から、プレーンを実行すると p、Vimのインスタンスは _ named register の代わりに _*_ register を使用しています*。これは、おそらく clipboard option に値unnamedが含まれているためです。このように設定すると、Vimはデフォルトでyank、delete、change、put操作の名前のないレジスタの代わりに_*_ registerを使用します(つまり、_"_プレフィックスで別のレジスタを指定しない限り、たとえば_"ap_をa registerから入れます)。

*名前のないレジスタは、実際には_"_(二重引用符)という名前です。それを使用するために名前を付ける必要がないという意味でのみ、「名前なし」です(デフォルトです)。つまり名前のないレジスタから置くために_""p_と言う必要はありません、ただpだけです。

clipboardのデフォルト値にはunnamedが含まれていないため、おそらく構成(またはプラグイン)の一部に由来します。コマンド_:verbose set clipboard?_は、現在の値を設定するスクリプトを表示します。構成ファイルでこれが行われている場合、tmuxの下で実行しているときは実行しないことをお勧めします。例えば:

_if $TMUX == ''
    set clipboard+=unnamed
endif
_

あるいは、Vim-inside-tmuxのインスタンスがGUI選択/クリップボードにアクセスできるようにする方法があります(したがって、_*_レジスタおよび/またはunnamedclipboardで動作します) 。 Mac OS Xを実行している場合は、 my workaround wrapper を参照してください。これにより、tmuxセッション内で実行されているプロセスのクリップボードアクセスが再度有効になります。他のOSまたはGUIを使用している場合、Vimが通常GUIと通信する方法と動作しない理由を調べる必要があります(たとえば、実行中の古いセッションへの接続によるX11での誤ったDISPLAY値など)古い値を持つシェル)。

101
Chris Johnsen

Vim/tmux/osxで機能するのは次のとおりです。

  1. インストール Homebrew
  2. Re-to-to-user-namespaceをインストールします:brew install reattach-to-user-namespace
  3. .vimrc:set clipboard=unnamed
  4. システムクリップボードを使用するようにtmuxに指示します。tmux.confで:set-option -g default-command "reattach-to-user-namespace -l bash"

ソース: https://coderwall.com/p/j9wnfw

49
akofink

fakeclip プラグインは、クリップボードレジスタを多くの端末で期待どおりに動作させ、tmux/screenをサポートします。使っていますか?問題が解決する場合があります。

また、このヒントに興味があるかもしれません...それはあなたの質問には当てはまりませんが、関連しています。 tmuxを実行しているシステム/端末の種類に応じて、.tmux.confにいくつかの調整が必要になる場合があります。たとえば、OS Xでの.tmux.confの抜粋を以下に示します(コメントにいくつかの指示があります)。

# To use pbcopy and pbpaste on OS X, get this wrapper and install
#    git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git
#    cd tmux-MacOSX-pasteboard/
#    make reattach-to-user-namespace
#    mv reattach-to-user-namespace /usr/local/bin
# After installing, the default command can be reset to use the 'reattach-to-user-namespace' 
# wrapper that was compiled/installed as descripted above.
set -g default-command "reattach-to-user-namespace -l /bin/bash"
# #Next, create Ctrl-c and Ctrl-v mappings
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"
bind C-v run "tmux set-buffer $(reattach-to-user-namespace pbpaste); tmux paste-buffer"
4
darcyparker

OSXでの私の経験からいくつかのメモを受け入れられた答えに追加するには:

  • set clipboard=unnamedではなくset clipboard=unnamedplusを実行してください
  • Tmuxサーバーを殺す必要がありました($ killall tmuxまたは$ tmux kill-session -a)。 tmux構成ファイルを再ロードすると、default-commandが設定されていることが示されましたが、vimはシステムクリップボードにアクセスできませんでした。
0
nbwoodward

遅い答えですが、.tmux.confに次の行が含まれている可能性もあります。

set -g set-clipboard off

.vimrcを含む

set clipboard=unnamed

これにより、vimはそこにないクリップボードを使用しようとします。

0
Beat Richartz