Termius ssh连接服务器 vim打开的文件无法复制问题

你的问题是:

• 在 Termius (macOS) SSH 连接到 VMware Ubuntu,使用 vim 打开 .cpp 文件时,可以复制文本;

• 但在 Windows 10 上 SSH 到 VMware 的 Red Hat 6.4 时,复制操作无效。

🎯 初步分析

复制问题通常与以下几个因素有关:

分类 可能原因

终端设置 vim 是否在 兼容模式、鼠标模式、屏幕缓冲区切换模式

SSH 工具 Windows 使用的 SSH 客户端(比如 cmd/PowerShell 的 ssh.exe、PuTTY、Termius、Mobaxterm 等)行为不同

操作系统 Red Hat 6.4 很旧,vim 版本和终端设置也可能落后或缺失支持

vim 配置 是否启用了 mouse=a,这会拦截鼠标选择,导致无法复制

✅ 快速排查和解决步骤

🧪 1. 检查 vim 是否启用了鼠标模式

在 Red Hat 上 SSH 后,打开 .cpp 文件时尝试以下操作:

输入命令:

:set mouse?

输出是 mouse=a 表示启用了鼠标模式,鼠标选择会被 Vim 接管,导致你不能复制。

✅ 临时关闭鼠标模式:

:set mouse=

现在你应该能用鼠标选中并复制了。

或永久关闭鼠标模式(编辑你的 .vimrc):

echo "set mouse=" >> ~/.vimrc

🧪 2. 检查终端是否支持复制(Windows)

如果你用的是 Windows Terminal + ssh:

• 鼠标选择 + Ctrl+C 复制应该正常;

• 但如果 Vim 进入 全屏模式(alternate screen buffer),你复制的是"空";

• 临时退出 Vim,复制内容,再回到 Vim;

• 或者用 set mouse= 禁用鼠标行为(上面已经说了);

• 或者在 .vimrc 加上:

set t_ti= t_te= " 禁用屏幕缓冲区切换

如果你用的是 PuTTY:

• 默认是右键复制、Shift+Insert 粘贴;

• 如果 Vim 启用了鼠标模式,也无法复制;

🛠 建议配置 .vimrc (适配远程开发和复制)

set mouse= " 禁用鼠标模式,方便复制

set number " 显示行号

syntax on " 开启语法高亮

set clipboard=unnamedplus " 如果有支持系统剪贴板

⚠️ 注意:clipboard=unnamedplus 在老旧系统(如 Red Hat 6.4)可能不支持。

✅ 最终建议

• macOS + Termius 正常 是因为 Termius 支持 macOS 原生剪贴板,Vim 没启用鼠标模式;

• Win10 + Red Hat 6.4 异常 是因为老系统 + 鼠标模式开启;

• 推荐禁用 vim 的鼠标模式或终端缓冲区切换,复制会恢复正常;

• 如果频繁开发,建议升级 VM 里的 Linux 系统或使用 VSCode Remote SSH 开发体验更好。

需要我帮你写一个 .vimrc 文件适配你两个环境的复制粘贴与开发?

下面是一个兼顾 复制粘贴流畅性 和 C++ 开发体验 的通用 .vimrc 配置,适配你的两种情况:

• ✅ macOS + Termius + Ubuntu(已正常复制)

• ✅ Windows 10 + SSH + Red Hat 6.4(解决复制问题)

✅ 推荐 .vimrc 配置

" --- 基础设置 ---

set nocompatible " 使用现代 Vim 行为

syntax on " 启用语法高亮

set number " 显示行号

set relativenumber " 相对行号(方便上下跳转)

" --- 缩进与格式 ---

set tabstop=4 " tab 显示为 4 空格

set shiftwidth=4 " >> << 的缩进为 4 空格

set expandtab " 用空格代替 tab

set autoindent " 自动缩进

set smartindent " 更智能的缩进方式

" --- 鼠标/复制相关 ---

set mouse= " ❗禁用鼠标模式,恢复鼠标选中复制

set ttymouse=xterm2 " 鼠标兼容模式(Windows 下更稳)

set t_ti= t_te= " ❗禁用 alternate screen,退出 Vim 时保留选中内容

" --- 搜索相关 ---

set ignorecase " 搜索忽略大小写

set smartcase " 有大写时仍区分大小写

set incsearch " 实时搜索

set hlsearch " 高亮搜索结果

" --- 界面优化 ---

set showcmd " 显示命令

set ruler " 显示光标位置

set cursorline " 高亮当前行

set encoding=utf-8 " 编码设置

" --- 文件操作 ---

set backup " 开启备份

set writebackup " 写入时备份

set undofile " 保留撤销历史

" --- 快捷键示例(可选) ---

" map :w:!g++ % -o %:r && ./%:r

" 上面这行绑定 F5 自动编译并运行 C++ 文件(如需)

📍 放置方式

  1. 登录目标服务器(Ubuntu 和 Red Hat 都做):

  2. 将上面内容保存到:

~/.vimrc

或你也可以直接运行(粘贴时别漏了引号):

cat < ~/.vimrc

<上面的配置内容>

EOF

✅ 效果说明

功能 效果

鼠标复制 不再被 Vim 接管,能正常选中复制

退出保留屏幕 不切换终端缓冲区,复制历史内容更稳定

缩进 + 高亮 + 行号 更适合写 C++

快捷键可自定义编译运行 可选绑定 F5 编译(g++)

如果你也使用 neovim(nvim),可以让我再帮你写一个 init.vim 或 Lua 版本。

是否要附带远程 C++ 编译运行快捷键或 LSP 支持配置?

相关推荐
北南京海3 小时前
[Linux]进程地址空间
linux·运维·服务器
yzx9910134 小时前
服务器生成图片
运维·服务器
liulilittle6 小时前
C++ TAP(基于任务的异步编程模式)
服务器·开发语言·网络·c++·分布式·任务·tap
caolib9 小时前
无需云服务器的内网穿透方案 -- cloudflare tunnel
运维·服务器·内网穿透·tunnel·cloudflared
誰能久伴不乏9 小时前
Linux系统调用概述与实现:深入浅出的解析
linux·运维·服务器
程序员学习随笔9 小时前
Linux进程深度解析(2):fork/exec写时拷贝性能优化与exit资源回收机制(进程创建和销毁)
linux·运维·服务器
-SGlow-10 小时前
MySQL相关概念和易错知识点(2)(表结构的操作、数据类型、约束)
linux·运维·服务器·数据库·mysql
代码改变世界ctw10 小时前
Linux内核设计与实现 - 第14章 块I/O层
linux·运维·服务器
Dreams_l11 小时前
网络编程2(应用层协议,传输层协议)
运维·服务器·网络
誰能久伴不乏13 小时前
Linux如何执行系统调用及高效执行系统调用:深入浅出的解析
java·服务器·前端