Vim Tmux复制缓冲区限制

Vim Tmux复制缓冲区限制,vim,copy-paste,tmux,iterm,Vim,Copy Paste,Tmux,Iterm,每当我从tmux缓冲区复制一些东西(通常是用鼠标),然后将其粘贴到ViM中时,内容就会被截断。最后一次尝试只得到了我复制的完整块的大约750字节 这在Mac上的iTerm中。请确保从tmux缓冲区粘贴 我也有同样的问题,粘贴步骤出错了。我偶然发现 我试图做的是简单地使用ctrl-v从系统剪贴板粘贴(正如您在问题中所解释的那样,这是有效的,但只是部分有效) 相反,使用ctrl-b]从tmux缓冲区粘贴可以正确完成任务。使用tmux 1.8、iTerm2和重新附加到用户名称空间时,我遇到了同样的问题

每当我从tmux缓冲区复制一些东西(通常是用鼠标),然后将其粘贴到ViM中时,内容就会被截断。最后一次尝试只得到了我复制的完整块的大约750字节

这在Mac上的iTerm中。

请确保从tmux缓冲区粘贴 我也有同样的问题,粘贴步骤出错了。我偶然发现

我试图做的是简单地使用ctrl-v从系统剪贴板粘贴(正如您在问题中所解释的那样,这是有效的,但只是部分有效)


相反,使用
ctrl-b]
从tmux缓冲区粘贴可以正确完成任务。

使用tmux 1.8、iTerm2和
重新附加到用户名称空间时,我遇到了同样的问题。我遇到了一个tmux配置绑定,它修复了这个问题:它显式地将最后一个缓冲区选择复制到剪贴板:


bind key q run“tmux保存缓冲区-|重新附加到用户名称空间pbcopy”


将其放入
~/.tmux.conf
中,然后
C-b q
将在选择后将所有内容拉入剪贴板。

要在不使用鼠标的情况下复制到Vim中,您可以将
tmux粘贴缓冲区
命令输出直接粘贴到正在编辑的文件中

noremap <leader>p :r !tmux paste-buffer<cr>
比如说



(*)在Vim的限制范围内,即。

问题已解决。几点建议

  • 不需要重新附加到用户命名空间
    。只需
    pbcopy
  • 使用
    tmux 2.3测试
  • 诀窍是让
    MouseDragEnd1Pane
    事件触发
    pbcopy
  • 使用
    iTerm2
    ,这意味着鼠标支持可以正常工作。 从
    tmuxv2.1
    设置选项-g鼠标打开
    是必需的
  • 您不需要vi复制模式。只需确保
    MouseDragEnd1Pane
    绑定如下
  • 这是我的精简版
    ~/.tmux.conf

    # --------------------------------
    # Turn on the Mouse Support - defaults seem good
    # --------------------------------
    set-option -g mouse on
    # when we finish "selecting" send it to pbcopy (and into the OS X buffer)
    bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "pbcopy"
    
    # --------------------------------
    # Use vim keybindings in copy mode
    # --------------------------------
    setw -g mode-keys vi
    
    # Setup 'v' to begin selection as in Vim
    # You enter with C-b [ and then "v" - then normal keypresses to "highlight"
    # .. [Enter] or "y" will select (because of below bindings)
    bind-key -t vi-copy v begin-selection
    #
    # 'y'ank will send the selection to the OS X buffer
    bind-key -t vi-copy y            copy-pipe "pbcopy"
    
    # --------------------------------
    # Update default binding of `Enter` to also use Send the selection to OS X buffer
    # --------------------------------
    unbind   -t vi-copy Enter
    bind-key -t vi-copy Enter        copy-pipe "pbcopy"
    
    # selecting can now be done with
    #  hilighting with a mouse
    #  selecting with C-b [ v .. now vi mode for selecting text
    #
    # pasting  can now be done with
    # ⌘ - V
    # C-b ]
    

    我回答了一个类似的问题。这里有几点可能会对您产生影响:

  • 终点站
  • tmux设置
  • 操作系统
  • 如果您试图从系统缓冲区粘贴并获得此行为,那么终端中可能存在截断tmux可以设置的数据大小的限制。解决方案(在tmux 2.6+中)是使用如下内容:

    # disable built-in setting of system clipboard
    set-option -g set-clipboard off
    # use external utility for setting system clipboard
    # on Linux - xclip (+ssh display forwarding for remote machines)
    # on osx - pbcopy
    # on cygwin - cat > /dev/clipboard
    # on Windows Subsystem for Linux (WSL) - clip.exe
    # copy-pipe-* commands also copy to the tmux clipboard
    # y yanks to clipboards but stays in copy mode
    bind -T copy-mode-vi y send-keys -X copy-pipe "xclip -in -selection clipboard"
    # Remove default handling
    unbind -T copy-mode-vi Enter
    # Enter yanks to clipboards then exits copy mode
    bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
    

    你可能应该提供更多的信息。以什么方式截断?从一开始?从最后开始?“完整块”是多少?如果只是从一开始,粘贴前是否进入插入模式?复制的文本中可能有一个特殊字符与vim模式不符。您是否尝试过在粘贴之前在vim中使用
    :设置粘贴
    切换
    粘贴
    模式?@pandubear粘贴刚刚结束时就被切断了。此外,这看起来更像是tmux而不是vim。粘贴到其他地方也有同样的问题。我已经有很长一段时间(使用Tmux、iTerm2)在使用重新附加到用户名称空间时遇到了这个问题,我求助于直接从Tmux的缓冲区粘贴,如下面的回答所述。请参阅我对这个类似问题的回答。您需要更新配置以使用copy pipe命令将数据传递给pbcopy。这不起作用,它只打印所选内容的2行。正如所回答的,系统剪贴板被截断的唯一原因是由于终端限制。您可以重新配置终端或使用外部实用程序将文本放入系统剪贴板。
    
    # disable built-in setting of system clipboard
    set-option -g set-clipboard off
    # use external utility for setting system clipboard
    # on Linux - xclip (+ssh display forwarding for remote machines)
    # on osx - pbcopy
    # on cygwin - cat > /dev/clipboard
    # on Windows Subsystem for Linux (WSL) - clip.exe
    # copy-pipe-* commands also copy to the tmux clipboard
    # y yanks to clipboards but stays in copy mode
    bind -T copy-mode-vi y send-keys -X copy-pipe "xclip -in -selection clipboard"
    # Remove default handling
    unbind -T copy-mode-vi Enter
    # Enter yanks to clipboards then exits copy mode
    bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"