【问题标题】:Fix Vim + Tmux yank/paste on unnamed register修复 Vim + Tmux 对未命名寄存器的 yank/paste
【发布时间】:2012-07-09 23:43:48
【问题描述】:

在 tmux 会话中使用 vim 时,我无法拉出或粘贴到未命名的寄存器。转到命名寄存器可以正常工作,但未命名永远不会工作。

错误是:

E353: Nothing in register *

没有 tmux,vim 使用我当前的设置可以正常工作。如何修复它,以便我可以使用 y 然后 p 没有错误且不指定寄存器?

【问题讨论】:

  • 你能显示你的 tmux.conf 吗?

标签: vim tmux


【解决方案1】:

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

*未命名的寄存器实际上命名为"(双引号)。它只是“未命名”,因为您不必命名即可使用它(这是默认设置)。 IE。你不必说""p 从未命名的寄存器中放入,只需p

clipboard 的默认值不包含unnamed,因此它可能来自您的一些配置(或插件)。命令:verbose set clipboard? 将显示设置当前值的脚本。如果这是在您的配置文件中完成的,那么当您在 tmux 下运行时,您可能不想这样做。例如:

if $TMUX == ''
    set clipboard+=unnamed
endif

或者,可能有一些方法可以让 Vim-inside-tmux 的实例访问 GUI 选择/剪贴板(因此可以使用 * 寄存器和/或 @987654343 中的 unnamed @)。如果您运行的是 Mac OS X,您可能需要查看 my workaround wrapper,它为 tmux 会话中运行的进程重新启用剪贴板访问。如果您使用其他操作系统或 GUI,那么您需要了解 Vim 通常如何与 GUI 对话以及它为什么不工作(例如 X11 下的错误 DISPLAY 值,可能是由于附加到正在运行的旧会话具有过期值的外壳)。

【讨论】:

  • 你是对的,我的 .vimrc 有 set clipboard=unnamed 行。我添加了条件,现在它在 tmux 内外都能正常工作。
  • 所有其他答案只是随机尝试不同的设置而不介意,只有你指出原因!谢谢。
  • 我应该在brew中使用--with-wrap-pbcopy-and-pbpaste选项安装它吗?
【解决方案2】:

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

  1. 安装Homebrew
  2. 安装重新附加到用户命名空间: 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

【讨论】:

  • 请注意,link-only answers are discouraged,SO 答案应该是搜索解决方案的终点(与另一个中途停留的参考相比,它往往会随着时间的推移变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。
  • 对于zsh 用户当然用zsh 替换bash
  • 记得重启所有登录会话(即重启你的 iTerm/Terminal 窗口)。
  • 如果使用"+p从系统剪贴板粘贴,第三步可以省略)。
【解决方案3】:

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

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

# 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】:

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

    set -g set-clipboard off

    结合.vimrc包含

    set clipboard=unnamed

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

    【讨论】:

      【解决方案5】:

      将我在 OSX 上的经验添加到已接受的答案中:

      • 确保您使用set clipboard=unnamed 而不是set clipboard=unnamedplus
      • 我不得不关闭我的 tmux 服务器($ killall tmux$ tmux kill-session -a)。重新加载 tmux 配置文件显示 default-command 已设置,但未授予 vim 访问系统剪贴板的权限。

      【讨论】:

        猜你喜欢
        • 2019-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-08
        • 1970-01-01
        • 1970-01-01
        • 2020-07-16
        相关资源
        最近更新 更多