请教用 tmux+vim 是怎么进行跨文件复制的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ljmready
V2EX    Vim

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

  •  
  •   ljmready 2016-03-07 15:07:04 +08:00 12164 次点击
    这是一个创建于 3507 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    好奇其它人怎么复制的?

    第 1 条附言    2016-03-09 09:51:47 +08:00
    更新..用 vim 分屏似乎可以解决复制问题,一直以为 vim 只能对同一个文件进行切割分屏,然后就用了 tmux ……这么看来我走了歪路
    28 条回复    2016-11-15 07:30:35 +08:00
    ishamo
        1
    ishamo  
       2016-03-07 15:32:23 +08:00
    复制的时候把 vim 里的行号去掉再复制啊。 set nonu
    thwawar
        2
    thwawar  
       2016-03-07 16:14:11 +08:00
    vim 可以 set nonu
    tmux 可以 resize-pane -Z
    msg7086
        3
    msg7086  
       2016-03-07 16:18:05 +08:00
    我开个 vim 然后分屏,复制没压力啊。
    cxbig
        4
    cxbig  
       2016-03-07 16:22:32 +08:00
    - tmux 是借用了系统的剪贴板实现跨软件或编辑器复制
    - tmux 下用左右 panes 的时候 copy 东西需要通过 vertical-mode
    4679kun
        5
    4679kun  
       2016-03-07 16:23:22 +08:00
    看好行号 然后 cat+sed+重定向
    ETiV
        6
    ETiV  
       2016-03-07 16:26:09 +08:00
    我有复制需求的时候都是 :tabnew
    然后 yy, gt, p
    Epirus
        7
    Epirus  
       2016-03-07 16:27:50 +08:00
    ljmready
        8
    ljmready  
    OP
       2016-03-07 16:36:04 +08:00
    @ishamo 也有试过,觉得比较麻烦嘛
    ljmready
        9
    ljmready  
    OP
       2016-03-07 16:39:22 +08:00
    @Epirus 好像挺不错,先 star 为敬
    iamleung
        10
    iamleung  
       2016-03-07 16:41:19 +08:00
    分屏+1 ,然后继续 y 复制
    tracyone
        11
    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
        12
    ljmready  
    OP
       2016-03-07 16:55:39 +08:00
    另外,用 tmux 复制时会复制少开头几个字。。
    zealot0630
        13
    zealot0630  
       2016-03-07 17:27:09 +08:00
    如果 vim 跑在本地的话:

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

    服务器开了 xforward 页可以用
    skydiver
        14
    skydiver  
       2016-03-07 17:31:16 +08:00
    先选中,然后:w /tmp/blablabla
    然后到另一个 vim :r /tmp/blablabla
    morefreeze
        15
    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
        16
    gonglexin  
       2016-03-07 17:35:15 +08:00
    文件内容不多的时候,我一般用 r (:h read)
    ljmready
        17
    ljmready  
    OP
       2016-03-07 22:33:50 +08:00
    @skydiver 这神技,大道至简,学习了
    ljmready
        18
    ljmready  
    OP
       2016-03-07 22:35:05 +08:00
    @msg7086 用 VIM 自带的分屏?
    introom
        19
    introom  
       2016-03-08 01:32:17 +08:00 via Android   1
    通常就三种,
    一,利用 x 的 clipboard.但我不喜欢这种,一来 vim 的依赖变多,二来我 mac 上还得装 X 才能 xforward ,三来 tmux 下 display 变量更新有点麻烦。

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

    三, clipper, 或者类似。我现在用的就是这个。谷歌 vim clipper 应该首页能出结果。
    tonghuashuai
        20
    tonghuashuai  
       2016-03-08 08:30:21 +08:00 via iPhone   1
    vim 同时打开两个文件就好了啊
    czb
        21
    czb  
       2016-03-08 09:03:14 +08:00 via Android   1
    先分屏 :sp / :vsp 然后在 yank 和 paste
    bramblex
        22
    bramblex  
       2016-03-08 09:16:17 +08:00   1
    我以前写过一个简单 vim 插件,用来在没有剪贴板的情况下在服务器跨 vim 进程复制粘贴……
    其实就是拿一个文件中转一下而已……
    jsonline
        23
    jsonline  
       2016-03-08 09:19:36 +08:00 via Android   1
    neovim
    Mush
        24
    Mush  
       2016-03-08 12:28:35 +08:00   1
    vim 开两个文件是个好方法, 如果用 tmux 分屏(或者两台机器)的话, 我都是`:! cat %`然后鼠标选中复制........
    pkking
        25
    pkking  
       2016-03-08 13:46:23 +08:00
    :vs
    vinceguo
        26
    vinceguo  
       2016-03-08 14:14:59 +08:00 via Android
    至于这么麻烦吗?鼠标选择之前按住 ctrl 就可以了
    Ubuntu 15.10 自带 terminal 亲测有效
    ljmready
        27
    ljmready  
    OP
       2016-03-09 09:49:07 +08:00
    @czb ..原来我走了邪路,一直以为 vim 只能对一个文件分屏
    Lordyung
        28
    Lordyung  
       2016-11-15 07:30:35 +08:00 via iPhone
    @morefreeze 原来可以这样,没想到
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5203 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 03:55 PVG 11:55 LAX 20:55 JFK 23:55
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86