支持 Clipboard 的 Vim
以 CentOS 系统为例,安装支持 Clipboard 的 vim-X11
。
vim-X11 使用
安装 vim-X11
yum install vim-X11
验证是否支持 Clipboard
# vimx --version | grep clipboard
+clipboard +jumplist +popupwin +user_commands
+ex_extra -mouse_jsbterm -sun_workshop +xterm_clipboard
可知,vim-X11 的命令程序名是 vimx
,如何使用通常的 vim
命令操作呢?可以使用别名或软链接解决。
使用别名
将别名添加到 shell 的配置文件中,使其永久生效。
echo "alias vim='vimx'" >> /etc/profile
然后,运行以下命令使其更改立即生效:
source /etc/profile
创建软链接
或者通过软链接来替换系统中的 vim
命令:
ln -sf /usr/bin/vimx /usr/bin/vim
这将 vim
命令永久指向 vimx
。
同步剪切板和匿名寄存器
Vim 有多个寄存器,y
, d
, p
等命令一般使用匿名寄存器 ""
;支持剪切板的额外选区寄存器有 "*
和 "+
。
在 X11 系统中(绝大多数带有桌面环境的 Linux 发行版),二者是有区别的:
"*
指 X11 中的 PRIMARY 选区,即鼠标选中区域。在桌面系统中可按鼠标中键粘贴。"+
指 X11 中的 Clipboard 选区,即系统剪切板。在桌面系统中可按 Ctrl+V 粘贴。
为了操作方便,复制内容不用指定寄存器(避免输入 "*
和 "+
),将剪切板寄存器和匿名寄存器保持同步(即共享剪切板),可以在 /etc/vimrc
中配置。
set clipboard=unnamed
- 在 Windows 和 macOS 上,使 Vim 的主选区寄存器和匿名寄存器共享,即在 Vim 中复制的内容可以粘贴到其他应用程序中。
- 在 Linux 上,它主要与 X11 剪贴板(主选区)和鼠标中键(触发粘贴)相关联。
set clipboard=unnamedplus
- 在 Windows 和 macOS 上,使 Vim 的系统剪切板寄存器
+
和匿名寄存器""
共享,即在 Vim 中复制的内容可以粘贴到其他应用程序中。 - 在 Linux 上,它主要与桌面系统的剪切板(例如 GNOME 的系统剪切板)相关联,支持通过
Ctrl+V
粘贴。
不支持 Clipboard 的场景
Linux 系统本身没有 Clipboard 的概念,Clipboard 只有图形界面才有,而图形界面的 GUI 程序并非 Linux 系统的必要部分。一般命令行界面的主机系统没有 Clipboard。所以,当访问没有桌面环境的 Linux 主机,是没办法直接访问 Clipboard 将内容复制到剪切板上。
可以通过 tmux
工具 或 TCP 通信 或 X11 转发,实现将远程主机内容用命令操作复制出来。
如通过启用 X11 Forwarding, 配置 SSH 客户端,方便在无 GUI 的远程服务器上(X Client)运行并通过 X 协议在本地主机(X Server)显示 GUI 应用,并实现复制粘贴功能。以下是设置步骤:
配置本地 X Server
在 Windows 上 安装和配置 X Server (以 VcXsrv 为例)。
- VcXsrv 是常用的 X server 工具,安装并启动进入配置向导。
- 选择 “Multiple windows”(或 “Fullscreen”,取决于你的需求),点击 “Next”。
- 在 “Display settings” 页面,保持默认设置(通常
Display number
为0
),点击 “Next”。 - 在 “Extra settings” 页面,选中 “Disable access control”(允许任何主机连接),点击 “Next”。
- 点击 “Finish” 启动 X Server。
配置 SSH 客户端(以 Xshell 为例)
在 Xshell 中启用 X11 转发功能。
- 打开 Xshell 并连接到远程主机。
- 在 Xshell 的连接会话中,选择你要配置的会话。
- 点击 “属性”,进入会话属性窗口。
- 在左侧的 “SSH” 的隧道部分,找到 “X11 转发” 选项。
- 勾选 “启用 X11 转发” 选项。
- 选择 “X DISPLAY”,并确保你选择的是本地 X server(如 Xming 或 VcXsrv)。
- 确保 “X DISPLAY” 地址正确,一般可以使用默认设置。
- 保存并连接。
配置远程主机(无 GUI 的服务器)
确保远程主机上的 SSH 服务允许 X11 Forwarding 转发。在远程主机上编辑 /etc/ssh/sshd_config
文件,确认以下设置:
X11Forwarding yes
X11DisplayOffset 10
保存更改并重启 SSH 服务,例如使用 sudo systemctl restart sshd
。
安装 X11 相关组件
针对 CentOS Steam 9 系统的安装:
yum install xorg-x11-server-Xorg xorg-x11-xauth xorg-x11-utils
xorg-x11-server-Xorg
: X Window System 的服务器端实现,用于处理显示和输入。xorg-x11-xauth
: X11 认证工具,用于生成和管理 X11 认证文件。
安装 X11 应用程序(测试验证):
yum install xterm
运行 X11 应用程序
确认 DISPLAY 环境变量:
通常,在远程主机上 X11 转发会自动设置,可以手动检查。终端输入 echo $DISPLAY
,返回类似 localhost:10.0
。
远程主机终端输入 xterm
,验证本地 X Server
会启动 xterm
程序。
验证 vim-X11
粘贴操作
在远程主机终端用 vim
打开要编辑的文件并复制内容,在本机计算机上使用 Ctrl + V
或右键点击选择粘贴来将剪贴板内容粘贴到本地应用程序中。
参考
问题
问题1:vim-X11 编辑文件复制粘贴并未生效,查看 vim --version
有警告信息:
WARNING! The remote SSH server rejected X11 forwarding request.
分析解决:命令行模式的远程主机没有 Clipboard,没法直接命令操作复制内容到剪切板,需要借助 X11 Forwarding 实现内容转发复制。