V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐书目
黑客与画家
REWORK 简体中文版
REWORK 精装原版
深入浅出设计模式 Head First Design Patterns
代码之美 Beautiful Code
数据之美 Beautiful Data
信息论、编码与密码学
Free as in Freedom
设计原本
精通正则表达式
Sponsored by
石墨文档
石墨文档
寻找中国最优秀的程序员
加入我们,一起来改变这个可爱的星球
Promoted by 石墨文档
V2EX  ›  程序员

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

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

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

    "+y

    还是

    "*y

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

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

    set clipboard=unnamed

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

    没有的话拿源码编 指定支持X什么的就可以
        2
    guoqiao   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
        3
    spark   2014-01-09 15:29:48 +08:00
    没遇到这问题, 我每次装新机都是这么操作的:
    $ brew install macvim --override-system-vim
        4
    xingxiucun   2014-01-09 15:36:33 +08:00
    @guoqiao gvim 。。。 木有用过os x 不知道有木有别的办法
        5
    spritevan   2014-01-09 15:40:16 +08:00
    1. terminal 里面按住 option 选好文字用 cmd+c 复制
    2. `:w !pbcopy` #把**全文**发给剪切板
    3. `:.w !pbcopy` #把**当前行**发给剪切板
    4. 选中多行后 `:!tee >(pbcopy)` #把**选中行**发给剪切板
        6
    zhufenggood   2014-01-09 15:56:02 +08:00
    alias vim="/Applications/MacVim.app/Contents/MacOS/Vim"
        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. **
        8
    likuku   2014-01-09 17:00:14 +08:00
    尝试 ~/.vimrc 里加一行 set mouse=v 呢?
        9
    guoqiao   2014-01-09 19:47:56 +08:00
    @xingxiucun
    @spark
    @zhufenggood
    谢谢你们的答案, 我知道很多人会说用 gvim 或 macvim 取代 vim. 不过我不喜欢同时开太多工具. 对于做 web 开发的人来说, terminal 和浏览器是必定要开的. 在 terminal 中使用 vim, 只需要切换标签页. 而如果又开一个 macvim, 切换的成本太高了. 况且, ssh 操作服务器的时候, 只能用 vim, 本地也用 vim, 可以保持工作环境的一致性. 好吧, 也许是我强迫症.
        10
    guoqiao   2014-01-09 19:48:56 +08:00
    @spritevan
    @dalang 好的,回头试试这个 pbcopy 的配置.
        11
    Esay   2014-01-09 19:49:49 +08:00 via iPhone
    @guoqiao 额 6楼的方法也没开 Macvim 啊 你也不试试zai shuo
        12
    guoqiao   2014-01-09 20:10:54 +08:00
    @Esay 之前有点疑惑,他这个意思, 是使用 macvim 里带的 vim 取代系统的 vim 是吗? 我试了下, 还是复制不出来. "+y "*y 都不行
        13
    silverymoon   2014-01-09 20:48:43 +08:00
    我也是和楼主一样的习惯,已经解决了。。。
    用homebrew,brew install vim,安装的vim是编译开关打开的,之后自己找到安装的目录alias一下就好了。。。
    mac不在身边,忘了brew的默认目录是啥了。。。
        14
    Esay   2014-01-09 20:55:22 +08:00 via iPhone   ♥ 1
    @guoqiao
    - 你先确定 which vim 确定一下用的哪个 vim
    - 然后 vimrc 里是否加了 set clipboard=unnamed
    在我这里完全好用,不太懂你这是怎么复制的,我一般v+上下左右+y
        15
    likuku   2014-01-09 23:18:21 +08:00
    @Esay 我刚在macosx lione 10.7.5 下测了,

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

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

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

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

    Upgrading Vim on OS X
    http://prioritized.net/blog/upgrading-vim-on-os-x/
        29
    guoqiao   2014-02-07 15:31:43 +08:00
    @spark 多谢. 解决了 vim 的问题后,工作更轻松了, 哈哈.
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   402 人在线   最高记录 2447   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 46ms · UTC 20:04 · PVG 04:04 · LAX 12:04 · JFK 15:04
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1