在tmux会话中使用vim时,我无法移动或粘贴到未命名的寄存器。去一个命名的寄存器工作正常,但未命名永远不会工作。
错误是:
E353: Nothing in register *
如果没有tmux,vim可以使用我当前的设置正常工作。我如何修复它以便我可以使用 y 然后 p 而不会出错并且不指定寄存器?
答案 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中对我有用:
brew install reattach-to-user-namespace
set clipboard=unnamed
set-option -g default-command "reattach-to-user-namespace -l bash"
答案 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
$ killall tmux
或$ tmux kill-session -a
)。重新加载tmux配置文件显示已设置了default-command,但未授予vim访问系统剪贴板的权限。