Подтвердить что ты не робот

Как копировать и вставлять между различными панелями tmux, использующими экземпляры vim

Пример: скопируйте в одну область tmux (через vim), затем переключитесь на другую панель (запустите другой экземпляр vim) и вставьте с помощью команды vim paste. Я знаю, что это можно сделать через tmux (используя префикс +]), но было бы очень удобно, если бы я мог копировать и вставлять с помощью привязок vim, так как я просто переключаюсь между разными панелями, работающими с vim.

Любые идеи?

4b9b3361

Ответ 1

Извините, я пытаюсь убедить вас использовать встроенные функции vim.


Чтобы сделать copy/paste простым, вы можете открывать файлы в других вкладках:

:tabe /path/to/another/file

Используйте gt или gt для переключения вкладок.


Или разделите окно на редактирование другого файла:

:sp /path/to/another/file

Используйте Ctrl-w w для переключения Windows.
Чтобы разделить окно по вертикали, используйте :vsp file


Обновление:

Это мой файл .tmux.conf:

# vim
setw -g mode-keys vi
bind [ copy-mode
bind -t vi-copy v begin-selection
bind -t vi-copy y copy-selection
bind -t vi-copy V rectangle-toggle
bind ] paste-buffer

# buffer
bind Space choose-buffer

Я использую их только тогда, когда мне нужно скопировать вывод терминала.

Ответ 2

Я использовал эту удобную привязку в течение нескольких лет:)

" copy to buffer
vmap <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>

Ответ 3

Хотя я согласен, что лучше просто использовать один экземпляр vim, вы можете сделать это только с помощью tmux. Он имеет встроенный режим копирования. Мой tmux.conf настроен так:

  setw -g mode-keys vi
  unbind [
  unbind p
  bind C-y copy-mode
  bind p paste-buffer
  bind -t vi-copy v begin-selection
  bind -t vi-copy y copy-selection
  bind -t vi-copy Escape cancel

Итак, вы можете использовать prefix-<C-y> для активации режима копирования, /search term в качестве примера, чтобы перейти туда, где хотите, v, чтобы визуально выбрать, y, чтобы вынуть в tmux. Затем перейдите на другую сессию vim и войдите в режим вставки. Используйте prefix-p, чтобы вставить то, что в буфере tmux paste. Существуют также способы копирования буфера tmux paste в системный буфер обмена.

Ответ 4

В настоящее время я застрял с ноутбуком, работающим под управлением Windows, но я делаю все свое развитие на сервере под управлением Linux, поэтому в конечном итоге я работаю в сеансе tmux через PuTTY весь день.

Я хотел скопировать текст между экземплярами vim, запущенными в разных окнах в моем сеансе tmux. Я попытался использовать регистр * для копирования в системный буфер обмена, но поскольку я подключен через PuTTY, у меня нет сеанса X, поэтому нет системного буфера обмена, даже если я запускаю gVim вместо vim. (Возможно, я мог использовать x-переадресацию или что-то, чтобы исправить это, но я не хотел устанавливать x-сервер на windows.)

Я думал, что должен быть способ использовать буфер копирования/вставки tmux из vim вместо системной клавиатуры, и, конечно же, кто-то написал плагин для этого.

Установка fakeclip добавляет новый регистр &, который сопоставляется с буфером tmux paste. Поскольку все мои экземпляры vim находятся в одном сеансе tmux, это делает его очень простым, чтобы вырвать/поместить текст между ними.

Документация плагина говорит, что fakeclip также должен работать с экраном gnu, но я лично его не тестировал.


TL;DR

Установите плагин fakeclip, а затем вы можете использовать " & y для поиска в буфере tmux и " & p для размещения из буфера tmux.

Ответ 5

Вы можете скопировать содержимое в буфер обмена, используя привязки vim, затем переключитесь на панель и вставьте ее. Возможно, будут удобны следующие привязки клавиш.

noremap ty "+y
noremap tY "+Y  // copy a whole line to the clipboard
noremap tp "+p  // put the text from clipboard after the cursor 
noremap tP "+P  // put the text from clipboard before the cursor 

Регистр "+ используется для доступа к системному Clipborad в Vim.

Некоторые полезные советы:
1. Вы можете нажать v или v или ctrl-v, чтобы войти в визуальный режим, затем выберите контент, который хотите выдернуть, и нажмите ty, чтобы скопировать его в буфер обмена.
2. ty можно комбинировать с другими движениями. Например, tyaw можно использовать для копирования слова под курсором в буфер обмена. tyib скопировать содержимое в круглые скобки. tyi" скопировать текст внутри двойной кавычки и т.д.

См. также Как сделать vim-пасту из (и скопировать в) системный буфер обмена? для дальнейшего объяснения.

Ответ 6

решение на Fedora24

вам нужно использовать vimx вместо vim

введите ваш .bashrc или .zshrc

alias vi='vimx'
alias vim='vimx'

а затем вы можете легко скопировать между панелями vims/tmux


$ vim --version | grep clipboard
-clipboard       +insert_expand   +path_extra      -toolbar
+eval            +mouse_dec       +statusline      -xterm_clipboard

$ vimx --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +toolbar
+eval            +mouse_dec       +statusline      +xterm_clipboard

vimx является частью VIM-Enhanced-2: 7.4.1868-1.fc24.x86_64, который вы, скорее всего, установили