有什么想法吗?
抱歉,我试图说服您使用vim内置功能。
为了使复制/粘贴
更加容易,您可以在另一个选项卡中打开文件:
:tabe /path/to/another/file
使用gt或gT切换选项卡页。
或者分割窗口以编辑另一个文件:
:sp /path/to/another/file
使用 Ctrl-ww 切换窗口。
要垂直分割窗口,请使用 :vsp 文件名
这是我的 .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
bind-key -T copy-mode-vi ...
而不是bind-key -t vi-copy ...
。 - chriad我已经用了这个方便的绑定工具好几年了 :)
" 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转发或类似方法来解决这个问题,但我不想在Windows上安装x-server。)
我认为应该有一种方法可以在vim中使用tmux的复制/粘贴缓冲区代替系统键盘,果然有人写了一个插件来实现这个功能。
安装fakeclip插件后,添加了一个新寄存器&
,它映射到tmux的粘贴缓冲区。由于我的所有vim实例都位于同一个tmux会话中,因此在它们之间复制/粘贴文本变得非常简单。
插件文档说fakeclip也应该适用于gnu screen,但我个人没有测试过。
简而言之
安装fakeclip插件,然后您可以使用"&y来将文本复制到tmux的缓冲区,以及使用"&p从tmux的缓冲区中粘贴。
虽然我同意最好只使用一个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 中访问系统剪贴板。v
或 V
或 ctrl-v
进入可视模式,然后选择要复制的内容,按 ty
将其复制到您的剪贴板中。ty
可以与其他动作组合使用。例如,tyaw
可用于将光标下的单词复制到剪贴板中。tyib
复制括号内的内容。tyi"
复制双引号内的文本,等等...这在neovim中可行。
执行:checkhealth
,你会发现类似于以下内容:
## Clipboard (optional)
- OK: Clipboard tool found: tmux
set clipboard+=unnamedplus
Fedora24的解决方案
您需要使用vimx而不是vim
将其放在您的.bashrc或.zshrc中
alias vi='vimx'
alias vim='vimx'
然后您可以轻松地在Vim/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 的一部分,您很可能已经安装了。
控制键+插入键 = 复制
Shift+插入键 = 粘贴