Как копировать и вставлять между различными панелями tmux, использующими экземпляры vim
Пример: скопируйте в одну область tmux (через vim), затем переключитесь на другую панель (запустите другой экземпляр vim) и вставьте с помощью команды vim paste. Я знаю, что это можно сделать через tmux (используя префикс +]), но было бы очень удобно, если бы я мог копировать и вставлять с помощью привязок vim, так как я просто переключаюсь между разными панелями, работающими с vim.
Любые идеи?
Ответы
Ответ 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, который вы, скорее всего, установили