修复Vim + Tmux在未命名的寄存器上猛拉/粘贴

Jas*_*son 65 vim tmux

在tmux会话中使用vim时,我无法抽取或粘贴到未命名的寄存器.去一个命名的寄存器工作正常,但未命名永远不会工作.

错误是:

E353: Nothing in register *
Run Code Online (Sandbox Code Playgroud)

没有tmux,vim可以使用我当前的设置正常工作.如何解决它,所以我可以用yp没有错误和不指定寄存器?

Chr*_*sen 101

从错误消息(Nothing in register *),当你做一个平原时,似乎 p,你的Vim实例正在使用* 寄存器而不是未命名的寄存器*.这可能是因为您的clipboard选项包含了该值unnamed.当以这种方式配置时,Vim将* 默认使用寄存器而不是未命名的寄存器进行抽取,删除,更改和放置操作(即除非您指定另一个带有"前缀的寄存器;例如"apa 寄存器中放入).

*未命名的寄存器实际上是命名的"(双引号).它只是"未命名",因为您不必将其命名为使用它(这是默认设置).也就是说,你不必说""p要从未命名的寄存器中输入p.

默认值clipboard不包含unnamed,因此它可能来自您的一些配置(或插件).该命令:verbose set clipboard?将显示设置当前值的脚本.如果在配置文件中执行此操作,则在tmux下运行时可能不希望这样做.例如:

if $TMUX == ''
    set clipboard+=unnamed
endif
Run Code Online (Sandbox Code Playgroud)

或者,可能有某种方法让Vim-inside- tmux的实例访问GUI选择/剪贴板(因此使用*寄存器和/或unnamedin clipboard).如果您运行的是Mac OS X,您可能需要查看我的解决方法包装器,它为tmux会话中运行的进程重新启用剪贴板访问.如果您正在使用其他操作系统或GUI,那么您将需要了解Vim通常如何与GUI通信以及它为何无法工作(例如X11下的错误DISPLAY值,可能是因为附加到正在运行的旧会话一个具有过期值的shell).

  • 你是对的,我的.vimrc有set clipboard = unnamed行.我添加了条件,现在它可以正常进出tmux. (4认同)
  • 我应该在brew中使用`--with-wrap-pbcopy-and-pbpaste`选项进行安装吗? (2认同)

ako*_*ink 49

这对我在vim/tmux/osx中有用:

  1. 安装 Homebrew
  2. 安装reattach-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

  • 对于`zsh`用户当然用`zsh`替换`bash`. (6认同)
  • 请注意,不鼓励[仅限链接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info),SO答案应该是搜索解决方案的终点(相比之下)引用的另一个中途停留,随着时间的推移往往会变得陈旧.请考虑在此处添加独立的概要,并将链接作为参考. (2认同)