如何在tmux会话中从vi编辑器复制多页长文本内容
问题根因
在tmux中打开vi这类全屏终端程序后,tmux的历史回滚缓冲区只会保存vi当前视口展示的内容,文件剩余内容存储在vi的内部缓存中,tmux无法直接读取,所以复制模式下没法向下滚动选中更多内容。
可行解决方案
方案1:vi内直接复制(推荐,操作最快)
如果远程主机开启了X11转发,或者你只是要把内容粘贴到远程端的其他位置:
- 要复制全文件内容:在vi普通模式下输入
:%y,内容就会复制到vi的默认缓冲区,需要粘贴时按p即可;如果要复制到系统剪贴板,改成输入:%y+ - 要复制指定范围内容:按
v进入vi的可视模式,用方向键选中所有需要的内容后,按y复制到vi缓冲区,按"+y复制到系统剪贴板
方案2:输出文件内容到终端后用tmux复制
如果没开X11转发,需要把内容复制到本地:
- 先按
:q退出vi,在远程shell中执行cat filename.java,把文件所有内容打印到终端 - 按
Ctrl+b [进入tmux复制模式,此时可以用PageUp/PageDown上下翻页找到需要复制的起始位置 - 按
Ctrl+空格开始选中,选中过程中可以用Ctrl+d向下翻半页、Ctrl+u向上翻半页,不用局限于方向键逐行移动 - 选完所有内容后按
Enter,内容就会存入tmux的复制缓冲区,按Ctrl+b ]即可粘贴
方案3:直接拉取文件到本地
如果需要复制的是整个文件,不用复制粘贴,直接在本地终端执行scp user@host:/path/to/filename.java ./,直接把文件传输到本地,效率更高。
内容的提问来源于stack exchange,提问作者uddi baba
相关产品推荐
相关产品推荐

