iTerm2 + Vim 下的复制粘贴

参考:link

安装 Vim 时如果打开了 clipboard 特性 ( vim --version | grep clipboard,系统自带的 Vim 是没有打开的,不想自己编译的话也可以通过安装 Macvim 然后将 vim alias 到 mvim ),则可以使用 * 寄存器( Vim 有很多剪贴板,mac 下的系统剪贴板是 *,还有 + ?),通过 "*y"*p 就可以完成复制粘贴到系统剪贴板,在 .vimrc 里加入了set cilpboard=unnamed后就不用加 "* 直接 yy 了。没有+clipboard的话也没关系,我们还有 mac 下的 pbcopy 和 pbpaste 命令可以使用。

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

iTerm2+Tmux+Vim 下的复制粘贴

不过同时作为一个 Tmux 用户,一般情况下Vim里的复制会遇到问题。Tmux 自己有提供一套复制粘贴功能,通过 Tmux 自己的复制机制只是将选中的内容复制到自己的 buffer 中,而由于我没怎么搞清的(权限相关)原因, Tmux 自己又不能访问系统剪贴板,所以直接在 Vim 里复制到系统剪贴板(以及从系统剪贴板拿东西)是不行的。reattach-to-user-namespace 则是用来解决 tmux 中 pbcopy 和 pbpaste 不能正常访问的问题,具体是什么问题而又怎么解决反正我也不是很懂去链接里看吧。。。

1. Vim中

参考:https://coderwall.com/p/j9wnfw

  1. 打开 Vim 对系统 clipboard 支持(可以自己编译或通过安装 Macvim 解决)。
  2. brew 安装 reattach-to-user-namespace
  3. .vimrc 中加入 set cilpboard=unnamed
  4. 在 .tmux.conf 中加入 set-option -g default-command "reattach-to-user-namespace -l zsh"

2. Tmux pannel中的复制

如果一个 Tmux window 中有两个水平的 pannel ,直接用鼠标选中然后复制是不能分辨 pannel 的,即复制一行会贯穿两个 pannel 。

参考:link

#excute in terminal
brew install reattach-to-user-namespace

#add the following to .tmux.conf

# Use vim keybindings in copy mode
setw -g mode-keys vi

# Setup 'v' to begin selection as in Vim (seems require Tmux 1.8)
# 一般情况中,<prefix>-[ 进入复制模式后 <space> 开始选中,<enter> 结束选中 (copy to buffer)
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

# Update default binding of `Enter` to also use copy-pipe 
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"

<prefix>-[ 进入 Tmux 的复制模式,使用 Vim 操作来进行移动,v 选中内容,y 进行复制,首先内容会复制到 Tmux 的 paste buffer 中,再由 pbcopy 来复制到系统的剪贴板中。

iTerm2 ssh到远程Linux下的Tmux+Vim的复制粘贴

好吧,同步系统剪贴板没有什么太好的方法。

1. reverse port

参考link,看看就好,我试了一下也不准备用下去,太麻烦了。

2. sshfs

用 sshfs 可以把远程的文件系统挂载到本地,可直接使用 brew install sshfs 安装,安装完成后其所依赖的 FUSE-based filesystem 是需要 root 用户安装的,按照 brew info fuse4x-kext 来操作。

然后

sshfs user@remote:/path/to/your/workspace /local/mount/dir

不过我用自己的vps上测了一下,速度很慢,我还是不考虑了。。

Vim中 ⌘+V 的粘贴

有时候如果我们想用 ⌘+v 来进行粘贴,直接粘贴的话内容是一段一段复制进去的,并且还伴有一些我们不希望出现的缩进或者其它奇怪的东西,我们可以进入 Vim 的 paste mode 来进行正常的粘贴。

参考:link

set pastetoggle=<F2>
#⌘+V paste

也可以直接通过 :set paste:set nopaste 来切换 paste mode。