示例:复制到一个 tmux 窗格(通过 vim),然后切换到另一个窗格(运行另一个 vim 实例)并使用 vim paste 命令粘贴。我知道这可以通过 tmux(使用前缀+])来完成,但是如果我可以使用 vim 绑定复制和粘贴,那将非常方便,因为我只是在运行 vim 的不同窗格之间切换。
有任何想法吗?
抱歉,我试图说服你使用 vim 的内置功能。
为copy/paste
方便起见,您可以在另一个标签页中打开文件:
:tabe /path/to/another/file
使用gt或gT切换标签页。
或拆分窗口以编辑另一个文件:
:sp /path/to/another/file
用于Ctrl-ww切换 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
我只在需要复制终端输出时使用它们。
我已经使用这种方便的绑定好几年了:)
" copy to buffer
vmap <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>
我目前在工作中被一台运行 Windows 的笔记本电脑困住了,但我在运行 Linux 的服务器上进行了所有开发,所以我最终整天都在 PuTTY 上的 tmux 会话中工作。
我想在我的 tmux 会话中在不同窗口中运行的 vim 实例之间复制文本。我尝试使用*
寄存器复制到系统剪贴板,但由于我是通过 PuTTY 连接的,所以我没有 X 会话,所以即使我启动 gVim 而不是 vim,也没有系统剪贴板。(我可能已经能够使用 x-forwarding 或其他东西来解决这个问题,但我不想在 Windows 上安装 x-server。)
我认为应该有一种方法可以使用 vim 中的 tmux 复制/粘贴缓冲区来代替系统键盘,果然有人为此编写了一个插件。
安装 fakeclip 会添加一个新的寄存器,&
映射到 tmux 的粘贴缓冲区。由于我所有的 vim 实例都在同一个 tmux 会话中,这使得在它们之间拉取/放置文本变得非常简单。
插件文档说 fakeclip 也应该与 gnu screen 一起使用,但我没有亲自测试过。
tl;博士
安装fakeclip插件,然后你可以使用yank"&y到tmux 的缓冲区,并从 tmux 的缓冲区中放入。"&p
虽然我同意最好只使用一个 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 的粘贴缓冲区复制到系统剪贴板。
您可以使用 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 粘贴?进一步解释。
这适用于neovim。
执行:checkhealth
,你会发现类似这样的东西:
## Clipboard (optional)
- OK: Clipboard tool found: tmux
如果没有,也许您需要将 tmux 升级到最新版本 2.9。
然后在 '~/config/nvim/init.vim' 中添加如下代码
set clipboard+=unnamedplus
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 的一部分
控制+插入=复制
移位+插入=粘贴