os x 下 vim 无法复制到系统剪切板的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容 #Wrapper { background-color: #e2e2e2; background-image: url("/static/img/shadow_light.png"), url("//cdn.v2ex.com/assets/bgs/circuit.png"); background-repeat: repeat-x, repeat-x; } #Wrapper.Night { background-color: #1f2e3d; background-image: url("/static/img/shadow.png"), url("//cdn.v2ex.com/assets/bgs/circuit_night.png"); background-repeat: repeat-x, repeat-x; background-size: 20px 20px, 162.5px 162.5px; }
guoqiao
V2EX    程序员

os x 下 vim 无法复制到系统剪切板的问题

  •  
  •   guoqiao 2014-01-09 15:07:53 +08:00 23915 次点击
    这是一个创建于 4343 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我习惯直接在 Terminal 中使用 vim, 而不是 macvim.

    经常需要将 vim 中的内容复制到网页或其他文本中.
    但是, 无论是

    "+y

    还是

    "*y

    都无法将选中的内容复制到系统剪切板.

    我在 vim 的配置文件中设置了

    set clipboard=unnamed

    我的电脑是Macbook Air 2013, 系统是 os x mavericks 10.9.1
    同样的配置, macvim 毫无问题.
    30 条回复    2018-01-16 12:00:56 +08:00
    xingxiucun
        1
    xingxiucun  
       2014-01-09 15:19:14 +08:00   1
    vim --version | grep clip

    没有的话拿源码编 指定支持X什么的就可以
    guoqiao
        2
    guoqiao  
    OP
       2014-01-09 15:28:46 +08:00
    @xingxiucun 貌似确实没有. 但是, 除了自己编译, 没有解决办法么?
    vim --version | grep clip
    -clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
    -xterm_clipboard -xterm_save
    spark
        3
    spark  
       2014-01-09 15:29:48 +08:00
    没遇到这问题, 我每次装新机都是这么操作的:
    $ brew install macvim --override-system-vim
    xingxiucun
        4
    xingxiucun  
       2014-01-09 15:36:33 +08:00
    @guoqiao gvim 。。。 木有用过os x 不知道有木有别的办法
    spritevan
        5
    spritevan  
       2014-01-09 15:40:16 +08:00   1
    1. terminal 里面按住 option 选好文字用 cmd+c 复制
    2. `:w !pbcopy` #把**全文**发给剪切板
    3. `:.w !pbcopy` #把**当前行**发给剪切板
    4. 选中多行后 `:!tee >(pbcopy)` #把**选中行**发给剪切板
    zhufenggood
        6
    zhufenggood  
       2014-01-09 15:56:02 +08:00
    alias vim="/Applications/MacVim.app/Contents/MacOS/im"
    dalang
        7
    dalang  
       2014-01-09 16:27:52 +08:00   1
    add the following codes to your .vimrc

    map "+y :w !pbcopy<CR><CR>
    map "+p :r !pbpaste<CR><CR>

    " ctrl-x for cut
    vmap <C-x> :!pbcopy<cr>
    " ctrl-c for copy
    vmap <C-c> :w !pbcopy<cr><cr>
    " ctrl-v for paste
    "nmap <C-v> :set paste<CR>:r !pbpaste<CR>:set nopaste<CR>
    imap <C-v> <Esc>:set paste<CR>:r !pbpaste<CR>:set nopaste<CR>


    ** use ctrl-c ctrl-v when copy to clipboard in vim. **
    likuku
        8
    likuku  
       2014-01-09 17:00:14 +08:00
    尝试 ~/.vimrc 里加一行 set mouse=v 呢?
    guoqiao
        9
    guoqiao  
    OP
       2014-01-09 19:47:56 +08:00
    @xingxiucun
    @spark
    @zhufenggood
    谢谢你们的答案, 我知道很多人会说用 gvim 或 macvim 取代 vim. 不过我不喜欢同时开太多工具. 对于做 web 开发的人来说, terminal 和浏览器是必定要开的. 在 terminal 中使用 vim, 只需要切换标签页. 而如果又开一个 macvim, 切换的成本太高了. 况且, ssh 操作服务器的时候, 只能用 vim, 本地也用 vim, 可以保持工作环境的一致性. 好吧, 也许是我强迫症.
    guoqiao
        10
    guoqiao  
    OP
       2014-01-09 19:48:56 +08:00
    @spritevan
    @dalang 好的,回头试试这个 pbcopy 的配置.
    Esay
        11
    Esay  
       2014-01-09 19:49:49 +08:00 via iPhone
    @guoqiao 额 6楼的方法也没开 Macvim 啊 你也不试试zaishuo
    guoqiao
        12
    guoqiao  
    OP
       2014-01-09 20:10:54 +08:00
    @Esay 之前有点疑惑,他这个意思, 是使用 macvim 里带的 vim 取代系统的 vim 是吗? 我试了下, 还是复制不出来. "+y "*y 都不行
    silverymoon
        13
    silverymoon  
       2014-01-09 20:48:43 +08:00
    我也是和楼主一样的习惯,已经解决了。。。
    用homebrew,brew install vim,安装的vim是编译开关打开的,之后自己找到安装的目录alias一下就好了。。。
    mac不在身边,忘了brew的默认目录是啥了。。。
    Esay
        14
    Esay  
       2014-01-09 20:55:22 +08:00 via iPhone   2
    @guoqiao
    - 你先确定 which vim 确定一下用的哪个 vim
    - 然后 vimrc 里是否加了 set clipboard=unnamed
    在我这里完全好用,不太懂你这是怎么复制的,我一般v+上下左右+y
    likuku
        15
    likuku  
       2014-01-09 23:18:21 +08:00   1
    @Esay 我刚在macosx lione 10.7.5 下测了,

    给 ~/.vimrc 里增加 set clipboard=unnamed 之后,开系统自带终端,打开 vim,yy 复制一行,

    切换到 Chrome 的 URL/Search 框里 CMD+V 就把 vim 里 yy 复制的内容贴上了。
    likuku
        16
    likuku  
       2014-01-09 23:19:36 +08:00
    补充,我 用的 vim 是 macosx 自带的。
    angelface
        17
    angelface  
       2014-01-09 23:43:45 +08:00
    只能重新编译,或是装个macvim,不用想其它办法了,默认的7.3,下个7.4编译一下吧,3分钟都用不上。
    silverymoon
        18
    silverymoon  
       2014-01-10 01:24:05 +08:00
    @angelface brew里面有7.4的,用起来还好。
    FrankFang128
        19
    FrankFang128  
       2014-01-10 01:36:45 +08:00 via Android
    VIM的硬伤
    guoqiao
        20
    guoqiao  
    OP
       
    @zhufenggood 用你的方法解决了, 多谢!
    在 .profile 里加了 alias . 系统自带的 vim 是 7.3, macvim 带的 vim 是7.4的.
    现在 vim --version | grep clip 的结果是:
    +clipboard +iconv +path_extra +transparency
    +eval +mouse_dec +startuptime -xterm_clipboard
    并且 yy 后,可以直接复制到其它地方了!
    我昨天在 Terminal 中新建了一个 tab 来尝试, 发现没成功. 今天唤醒休眠的电脑, 又新建个标签页试了下, 居然成功了. 我的 Terminal 程序以及电脑一直没有重启过, 搞不懂为何之前没成功.
    guoqiao
        21
    guoqiao  
    OP
       2014-01-10 04:14:07 +08:00   1
    @Esay 我之前没说清楚, 我其实尝试了两种方式:
    1. 使用vim寄存器 + 或者 * 来复制到系统剪切板. 例如选中文本后, 按下 "+y 就表示复制到 + 这个寄存器, 一般来说, 就可以复制到系统剪切板了. 有的系统上是 *
    2. 在 vimrc 中 set clipboard=unnamed 中之后, vim 就会使用系统剪切板, 这种方式更方便一些, 只是你就失去了 vim 的独立剪切板.
    guoqiao
        22
    guoqiao  
    OP
       2014-01-10 04:16:44 +08:00
    @likuku 一般情况下,像你说的这样就可以了. 我之前在 ubuntu 上就是这么用的. 但是到了 os x 上就是不成功. 目前看来是我之前的 vim 7.3 不支持系统剪切板.
    guoqiao
        23
    guoqiao  
    OP
       2014-01-10 04:19:04 +08:00
    @FrankFang128 折腾确实累人. 但是无需鼠标运指如飞的快感也确实让人上瘾...
    guoqiao
        24
    guoqiao  
    OP
       2014-01-10 04:21:43 +08:00
    谢谢大家, 结贴了.
    解决了这个麻烦, 工作效率又提升了!
    guoqiao
        25
    guoqiao  
    OP
       2014-01-10 04:59:21 +08:00   2
    总结一下这个问题.
    我的系统里其实有三个 vim:

    1. 系统自带的, 可执行程序是 /usr/bin/vim, 安装目录是 /usr/share/vim/, 版本7.3.

    2. 我使用 homebrew 后顺手安装了一次 vim, 安装目录:/usr/local/Cellar/vim/, 版本7.4. 可执行程序是 /usr/local/Cellar/vim/7.4.052/bin/vim , 并且有一个指向它的链接:
    /usr/local/bin/vim -> ../Cellar/vim/7.4.052/bin/vim

    3. 为了解决剪切板的问题, 我安装了 macvim. 这样还会有一份 vim:
    /Applications/MacVim.app/Contents/MacOS/Vim, 版本7.4

    执行 which vim 的结果:
    /usr/bin/vim
    可见, 尽管我用 homebrew 以及 macvim 安装了新的 vim 7.4, 但是系统默认使用的还是自带的7.3的老版本.
    而执行 /usr/bin/vim --version | grep clipboard 又发现, 这个版本不支持 clipboard.
    这就是问题的根本原因.
    我将 /usr/bin/vim 给重命名了一下, 此时再 which vim, 就指向 /usr/local/bin/vim 了, 问题也解决了.

    希望对遇到此问题的同学有帮助. 再次谢谢大家!
    soli
        26
    soli  
       2014-01-10 22:18:17 +08:00
    soli
        27
    soli  
       2014-01-10 22:28:23 +08:00   1
    Mac + tmux + Vim 用户的解决方案在这里:

    https://coderwall.com/p/j9wnfw
    spark
        28
    spark  
       2014-02-07 09:53:41 +08:00
    今天重装系统的时候发现收藏的一个链接, 之前回复楼主时没注意, 补充一下, 基本思路是一样的:

    Upgrading Vim on OS X
    http://prioritized.net/blog/upgrading-vim-on-os-x/
    guoqiao
        29
    guoqiao  
    OP
       2014-02-07 15:31:43 +08:00
    @spark 多谢. 解决了 vim 的问题后,工作更轻松了, 哈哈.
    zjyExcelsior
        30
    zjyExcelsior  
       2018-01-16 12:00:56 +08:00
    @spritevan 完美,感谢~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5712 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 03:10 PVG 11:10 LAX 19:10 JFK 22:10
    Do have faith in what you're doing.
    ubao msn 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