固定Vim+;Tmux在未命名寄存器上拉伸/粘贴

固定Vim+;Tmux在未命名寄存器上拉伸/粘贴,vim,tmux,Vim,Tmux,在tmux会话中使用vim时,我无法拖动或粘贴到未命名寄存器。去一个有名字的登记处工作很好,但没有名字的永远不会工作 错误是: E353: Nothing in register * 没有tmux,vim可以使用我的当前设置正常工作。如何修复它,以便在没有错误和指定寄存器的情况下使用y然后p?从错误消息(Nothing in register*)中可以看出,当您执行普通操作时p,您的Vim实例使用的是,而不是*。这可能是因为您包含了值unnamed。当以这种方式配置时,Vim将使用*寄存器而不

在tmux会话中使用vim时,我无法拖动或粘贴到未命名寄存器。去一个有名字的登记处工作很好,但没有名字的永远不会工作

错误是:

E353: Nothing in register *
没有tmux,vim可以使用我的当前设置正常工作。如何修复它,以便在没有错误和指定寄存器的情况下使用y然后p?

从错误消息(
Nothing in register*
)中可以看出,当您执行普通操作时<代码>p,您的Vim实例使用的是,而不是*。这可能是因为您包含了值
unnamed
。当以这种方式配置时,Vim将使用
*
寄存器而不是未命名的寄存器进行默认的yank、delete、change和put操作(即,除非您指定另一个带有
前缀的寄存器;例如从
a
寄存器中放入的
”ap

*未命名寄存器实际上被命名为
(双引号)。它只是“未命名”的意思,即您不必命名它就可以使用它(这是默认值)。也就是说,您不必说
“p
就可以从未命名寄存器中放入,只需说
p

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

或者,也可以通过某种方式让tmux中的Vim实例访问GUI选择/剪贴板(从而使用
*
寄存器和/或
剪贴板中的
未命名
)。如果您运行的是Mac OS X,您可能需要查看它是否为tmux会话中运行的进程重新启用剪贴板访问。如果您使用的是其他操作系统或GUI,则需要了解Vim通常如何与GUI对话以及为什么它不工作(例如,X11下的显示值错误,可能是由于连接到运行具有过期值的shell的旧会话造成的)。

该插件使剪贴板寄存器在许多终端中按预期运行,并支持tmux/screen。您正在使用它吗?它可能会解决您的问题

此外,您可能对这个技巧感兴趣……它不适用于您的问题,但与您的问题相关。根据您运行tmux的系统/终端类型,您可能需要对
.tmux.conf
进行一些调整。例如,这里是我在OS X上的
.tmux.conf
的摘录(注释中有一些说明):


下面是我在vim/tmux/osx中的工作原理:

  • 安装
  • 安装重新附加到用户命名空间:
    brew安装重新附加到用户命名空间
  • in.vimrc:
    set clipboard=unnamed
  • 告诉tmux使用系统剪贴板: 在.tmux.conf中:
    set option-g默认命令“重新附加到用户名称空间-l bash”

  • 来源:

    迟交的答案,但也可能是您的
    .tmux.conf
    包含以下行:

    set-g设置剪贴板关闭

    与包含以下内容的
    .vimrc
    组合

    设置剪贴板=未命名


    这将导致vim尝试使用不存在的剪贴板。

    要将我在OSX上的经验中的一些注释添加到公认的答案中:

    • 确保执行
      set clipboard=unnamed
      操作,而不是
      set clipboard=unnamedplus
    • 我必须杀死我的tmux服务器(
      $killall tmux
      $tmux kill session-a
      )。重新加载tmux配置文件表明设置了默认命令,但未授予vim访问系统剪贴板的权限

    你能展示你的tmux.conf吗?你是对的,my.vimrc设置了clipboard=unnamed行。我添加了条件,现在它在tmux内外都能正常工作。所有其他答案都只是随机尝试不同的设置,没有考虑,只有你指出了原因!谢谢。我应该使用
    ——使用wrap-pbcopy和pbpaste
    选项安装它吗在brew中?请注意,答案应该是搜索解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移往往会变得陈旧)请考虑在这里添加一个独立的概要,将链接作为参考。对于<代码> ZSH 用户当然替换<代码> BASH < /代码> <代码> ZSH 。记住,在这样做之后重新启动任何登录会话(即重新启动ItdiM/终端窗口)。如果使用<代码>,可以省略第三步。+p
    从系统剪贴板粘贴,如果您想将默认vim寄存器从系统剪贴板中分离(其余部分对于我来说仍然是在tmux中工作所必需的)。
    if $TMUX == ''
        set clipboard+=unnamed
    endif
    
    # 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"