Ограничение буфера копирования Tmux

Всякий раз, когда я копирую что-то (обычно с помощью мыши) из буфера tmux и позже вставляю это в ViM, содержимое усекается. Последняя попытка дала мне только около 750 байт полного блока, который я скопировал.

Это в iTerm на Mac.


person Evert    schedule 27.03.2014    source источник
comment
Вам, вероятно, следует дать дополнительную информацию. Урезано каким образом? С начала? С конца? Сколько стоит полный блок? Если это только с самого начала, вы входите в режим вставки перед вставкой?   -  person pandubear    schedule 28.03.2014
comment
Возможно, в скопированном тексте есть специальный символ, который портит режимы vim. Вы пытались переключить режим paste с :set paste в vim перед вставкой?   -  person Aliou    schedule 28.03.2014
comment
@pandubear обрывается только в конце. Кроме того, это больше похоже на tmux, чем на vim. Вставка в другое место имеет ту же проблему.   -  person Evert    schedule 28.03.2014
comment
У меня была эта проблема в течение длительного времени (используя Tmux, iTerm2) с использованием пространства имен reattach-to-user, и я прибегаю к вставке непосредственно из буфера Tmux, как указано в ответе ниже.   -  person shashin    schedule 30.06.2014
comment
Смотрите мой ответ на этот аналогичный вопрос. Вам нужно обновить конфигурацию, чтобы использовать команду copy-pipe для передачи данных в pbcopy. superuser.com/a/956451/52396   -  person Ryan Dlugosz    schedule 13.08.2015


Ответы (5)


обязательно вставьте из буфера tmux

У меня была такая же проблема, и я неправильно понял шаг вставки. Я наткнулся на этот пост.

То, что я пытался сделать, это вставить из системного буфера обмена, просто используя ctrl-v (что сработало, но только частично, как вы объяснили в своем вопросе).

Вместо этого вставка из буфера tmux с использованием ctrl-b ] делает работу правильно.

person samstav    schedule 28.05.2014
comment
Это не работает, он печатает только 2 строки из выделенного. - person weberc2; 06.04.2016
comment
Как указано в ответе ниже, единственная причина, по которой системный буфер обмена усекается, связана с ограничением терминала. Вы можете перенастроить свой терминал или получить текст в системный буфер обмена с помощью внешней утилиты. - person Chris Hunt; 06.05.2018

У меня была такая же проблема с использованием tmux 1.8, iTerm2 и reattach-to-user-namespace. Я наткнулся на привязку конфигурации tmux, которая решает проблему: она явно копирует последний выбор буфера в буфер обмена:

bind-key q run "tmux save-buffer - | reattach-to-user-namespace pbcopy"

Поместите его в свой ~/.tmux.conf, а затем C-b q загрузит все в буфер обмена после выбора.

person lothario    schedule 26.07.2014

Проблема решена. Несколько указателей.

  1. reattach-to-user-namespace не требуется. Просто pbcopy.
  2. Протестировано с tmux 2.3
  3. Хитрость заключается в том, чтобы событие MouseDragEnd1Pane запускало pbcopy.
  4. Используйте iTerm2, что означает, что поддержка мыши просто работает. Из tmux v2.1 требуется только set-option -g mouse on.
  5. Вам не нужен режим vi-copy. Просто убедитесь, что 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 ]
person Ramon    schedule 13.09.2017

Чтобы скопировать в Vim без мыши, вы можете вставить вывод команды tmux paste-buffer прямо в редактируемый файл.

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

Сохраните его в своем vimrc.

Он отображает \+p для вставки из tmux буфер.

<leader> по умолчанию является обратной косой чертой (\).

Но вы можете изменить его на любой другой ключ (*), который вам нравится, установив:

let mapleader="\<Space>"

например.


(*) То есть в пределах Vim.

person Community    schedule 10.06.2017

Я ответил на аналогичный вопрос здесь. Здесь есть несколько моментов, которые могут повлиять на вас:

  1. Терминал
  2. настройки tmux
  3. OS

Если вы пытаетесь вставить из системного буфера и получаете такое поведение, возможно, в вашем терминале есть ограничение, которое усекает размер данных, который может быть установлен 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"
person Chris Hunt    schedule 06.05.2018