tmux、vim和系统剪切板公用问题

vim的剪切板和系统公用问题一直是一大痛点,粘贴少数文本的时候尚可,但是剪切带有换行的时候就完全乱了,下一行总是比上一行多缩进一次。对于我这种主要用python的人来说,这简直太难受了。之前我一直忍着,今天实在忍不了了,想找个方案解决这个问题,单最终还是没解决。

其实vim可以将文本剪切/粘贴自寄存器的,有一个"寄存器就和系统是公用的。在系统看vim --version是不是支持clipboard,如果没有的话,可以按照这里加上--with-clipboadrd重新编译一下vim。

我重新编译之后,发现clipboard那里已经是+了,但是发现还是不能粘贴到系统剪切板。才发现vim直接在终端模拟器下(比如我用的ITerm2)是支持的,但是在tmux下是不支持和系统剪切板公用的(发现tmux有很多不支持的地方,比如brew service)。查了一下,tmux也维护着一个剪切板(卧槽,幸亏iTerm2没有自己的剪切板),那么如果要实现vim到系统剪切板复制粘贴,要将vim和系统的剪切板通过tmux共享……

查了一下,发现这个插件:https://github.com/roxma/vim-tmux-clipboard但是尝试安装了,发现没啥用。


解决方案:

从终端向系统粘贴:在vim中是可以使用tmux进行剪切的(但可能会连行号一起剪切了,可以使用块剪切解决,不是大问题)。所以只要解决从终端向外剪切这个问题就好了。解决方案是写一个tmux脚本将tmux的buffer同步到系统的剪切buffer中,具体可以看这个commit。这个脚本用到了一个同步tmux和系统buffer的软件,安装方法:brew install reattach-to-user-namespace.

从系统向终端粘贴:粘贴到tmux没问题,但是粘贴到vim就可能出现下一行比上一行多缩进的情况。这是因为vim在下一行自动给你按照上一行缩进了。解决方法是粘贴的时候临时关闭这种缩进,使用vim命令: set paste


关于未解决的问题:


博客有一个分类是记录未解决的问题的,比如此文。但是发现这样管理不太好。所以打算换一个方案,在github上开了一个项目,只使用issue记录目前生活、编程等各方面未找到合适的解决方法的问题,等issue解决的话就关闭。如果值得分享的话再写一篇博文。

参考资料:

  1. http://harttle.com/2017/06/23/vim-tmux-clipboard.html
  2. http://foocoder.com/2013/07/28/zhong-duan-huan-jing-zhi-tmux/
  3. 终端环境之tmux


Leave a comment

您的电子邮箱地址不会被公开。 必填项已用*标注