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

时间:2012-07-09 23:43:48

标签: vim tmux

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

错误是:

E353: Nothing in register *

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

5 个答案:

答案 0 :(得分:100)

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

*未命名的寄存器实际上命名为a(双引号)。它只是“未命名”,因为您不必将其命名为使用它(这是默认设置)。即您不必说"来自未命名的注册表,只需""p

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

:verbose set clipboard?

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

答案 1 :(得分:49)

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

  1. 安装Homebrew
  2. 安装reattach-to-user-namespace: brew install reattach-to-user-namespace
  3. in .vimrc:set clipboard=unnamed
  4. 告诉tmux使用系统剪贴板: 在.tmux.conf中:set-option -g default-command "reattach-to-user-namespace -l bash"
  5. 来源:https://coderwall.com/p/j9wnfw

答案 2 :(得分:4)

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"

答案 3 :(得分:0)

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

set -g set-clipboard off

与包含<{p}}的.vimrc相结合

set clipboard=unnamed

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

答案 4 :(得分:0)

根据我在OSX上的经验,将几个注释添加到已接受的答案中:

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