V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  
  •   guoqiao · 2014-01-09 15:07:53 +08:00 · 10502 次点击
    这是一个创建于 1315 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我习惯直接在 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   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1708 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 60ms · UTC 15:06 · PVG 23:06 · LAX 08:06 · JFK 11:06
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1