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

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

Есть идеи?

 sashang15 июн. 2012 г., 02:41
панели tmux работают на разных хостах vim? Если нет, я бы просто запустил один экземпляр vim и использовал буферы vim, чтобы открыть 2 файла и вставить между буферами.
 JonnyRaa11 дек. 2018 г., 17:43
это может быть связано с тем, что ваша версия vim не компилируется с поддержкой буфера обмена - см. ответ @ DmitrySemenov ниже

Ответы на вопрос(6)

что лучше всего использовать один экземпляр 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. Есть также способы скопировать буфер вставки tmux в системный буфер обмена.

 23 мая 2017 г., 10:44
Почему лучше использовать один экземпляр vim? Конечно, это несовместимо с идеей иметь разные рабочие пространства? Это не кажется очень практичным, когда у меня есть 5 крупных, не связанных между собой проектов.
 24 мая 2017 г., 02:35
Главным образом вопрос мнения и / или эффективности процессора. Вот видео для просмотра:vimeo.com/4446112

используя привязки 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 

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

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

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

 27 мая 2015 г., 20:10
Ради тех, кто может не знать эти команды, не могли бы вы добавить объяснение каждой из них? Это сделало бы ответ более полезным!
 30 мая 2015 г., 05:15
@PetahChristian Я очень удивлен, что мой ответ должен быть замечен! Я расширяю свой ответ сейчас. Если есть какие-то двусмысленные или грамматические ошибки (я не являюсь носителем английского языка), пожалуйста, дайте мне знать :)

solution on 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-extended-2: 7.4.1868-1.fc24.x86_64, который вы, скорее всего, установили

Решение Вопроса

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

:tabe /path/to/another/file

использованиеgt или жеgT переключать вкладки.

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

:sp /path/to/another/file

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

Update:

Это мое.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

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

 gylaz19 июн. 2012 г., 01:01
Нет ли способа сделать это напрямую через tmux? У меня открыты разные панели в разных каталогах, и иногда неудобно: tabe или: sp и вводить длинный путь. Гораздо проще переключать панели и вставлять.
 15 июн. 2012 г., 02:08
Используйте регистр* а также+ манипулировать системным буфером обмена.
 26 июн. 2013 г., 15:35
Я думаю, что есть причины не просто использовать один экземпляр vim. Например, вам может потребоваться открыть только три панели в вашем терминале: один сеанс редактирования на половину экрана, сеанс редактирования на четвертом экране и терминал на четвертом экране. Я не уверен, что это можно сделать с помощью одного экземпляра vim.
 15 июн. 2012 г., 02:05
или вращать буферы, а как насчет копирования в буфер обмена?
 01 мар. 2018 г., 13:49
Для более новых версий tmux этоbind-key -T copy-mode-vi ... вместоbind-key -t vi-copy ...

" copy to buffer
vmap <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>
 05 нояб. 2015 г., 07:26
Точно, он не скопировал в системный буфер обмена. Но тогда выполни требование этого вопроса :)
 04 нояб. 2015 г., 05:33
Это работает только между VIMS

казнить:checkhealth, вы найдете что-то вроде этого:

## Clipboard (optional)
  - OK: Clipboard tool found: tmux

Если нет, возможно, вам нужно обновить tmux до последней версии 2.9.

Затем добавьте следующий код в файл & apos; ~ / config / nvim / init.vim.

set clipboard+=unnamedplus

Ваш ответ на вопрос