请教用 tmux+vim 是怎么进行跨文件复制的?

2016-03-07 15:07:04 +08:00
 ljmready

现在的开发环境是 centos server 版,习惯用 vim 做编辑器,
为了分屏,用了 tmux ,然后发现要跨文件复制很麻烦。

tmux 的 ctrl+a [ 空格,会将 vim 的行号甚至状态栏也复制进来

vim 的"+y 复制方式,也无法成功,因为 centos 的 vim 没有+寄存器。

至于 tmux 下用鼠标选择,会将两个竖屏的代码同时复制。。。

好奇其它人怎么复制的?

11497 次点击
所在节点    Vim
28 条回复
ishamo
2016-03-07 15:32:23 +08:00
复制的时候把 vim 里的行号去掉再复制啊。 set nonu
thwawar
2016-03-07 16:14:11 +08:00
vim 可以 set nonu
tmux 可以 resize-pane -Z
msg7086
2016-03-07 16:18:05 +08:00
我开个 vim 然后分屏,复制没压力啊。
cxbig
2016-03-07 16:22:32 +08:00
- tmux 是借用了系统的剪贴板实现跨软件或编辑器复制
- tmux 下用左右 panes 的时候 copy 东西需要通过 vertical-mode
4679kun
2016-03-07 16:23:22 +08:00
看好行号 然后 cat+sed+重定向
ETiV
2016-03-07 16:26:09 +08:00
我有复制需求的时候都是 :tabnew
然后 yy, gt, p
Epirus
2016-03-07 16:27:50 +08:00
ljmready
2016-03-07 16:36:04 +08:00
@ishamo 也有试过,觉得比较麻烦嘛
ljmready
2016-03-07 16:39:22 +08:00
@Epirus 好像挺不错,先 star 为敬
iamleung
2016-03-07 16:41:19 +08:00
分屏+1 ,然后继续 y 复制
tracyone
2016-03-07 16:44:24 +08:00
```
# MSYS
if-shell 'uname | grep -qi MSYS_NT' 'bind -t vi-copy y copy-pipe "cat > /dev/clipboard"'
if-shell 'uname | grep -qi MSYS_NT' 'bind ] run "cat /dev/clipboard | tmux load-buffer - ; tmux paste-buffer"'

# os x
#if-shell 'uname | grep -qi Darwin' 'set-option -g default-command "reattach-to-user-namespace -l zsh"'
if-shell 'uname | grep -qi Darwin' 'bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"'
if-shell 'uname | grep -qi Darwin' 'bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"'
if-shell 'uname | grep -qi Darwin' 'bind ] run "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"'

# Linux
if-shell 'uname | grep -qi Linux' 'bind -t vi-copy y copy-pipe "xclip -sel clip -i"'

```
ljmready
2016-03-07 16:55:39 +08:00
另外,用 tmux 复制时会复制少开头几个字。。
zealot0630
2016-03-07 17:27:09 +08:00
如果 vim 跑在本地的话:

1. 按 v 选中想要复制的文本
2. "*y 复制到本地 X 剪贴板
3. 切换到要复制的 vim
4. "*p 把 X 剪贴版的内容复制到 vim 中

服务器开了 xforward 页可以用
skydiver
2016-03-07 17:31:16 +08:00
先选中,然后:w /tmp/blablabla
然后到另一个 vim :r /tmp/blablabla
morefreeze
2016-03-07 17:33:58 +08:00
" Allow to copy/paste between VIM instances
"copy the current visual selection to ~/.vbuf
vmap <leader>y :w! ~/.vbuf<cr>

"copy the current line to the buffer file if no visual selection
nmap <leader>y :.w! ~/.vbuf<cr>

这样满足吗?
gonglexin
2016-03-07 17:35:15 +08:00
文件内容不多的时候,我一般用 r (:h read)
ljmready
2016-03-07 22:33:50 +08:00
@skydiver 这神技,大道至简,学习了
ljmready
2016-03-07 22:35:05 +08:00
@msg7086 用 VIM 自带的分屏?
introom
2016-03-08 01:32:17 +08:00
通常就三种,
一,利用 x 的 clipboard.但我不喜欢这种,一来 vim 的依赖变多,二来我 mac 上还得装 X 才能 xforward ,三来 tmux 下 display 变量更新有点麻烦。

二,用 tmux 的 buffer ,局限是你必须得跑着 tmux

三, clipper, 或者类似。我现在用的就是这个。谷歌 vim clipper 应该首页能出结果。
tonghuashuai
2016-03-08 08:30:21 +08:00
vim 同时打开两个文件就好了啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/261680

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX