Vim
neovim
更现代化的vim https://github.com/neovim/neovim
安装
apt仓库里的版本普遍较旧,建议直接从 GitHub Release 下载最新的预编译包:
# 下载地址:https://github.com/neovim/neovim/releases
# 下载对应平台的压缩包(如 nvim-linux64.tar.gz)后解压,将可执行文件放入 PATH 即可
# 例如:
curl -LO https://github.com/neovim/neovim/releases/download/v0.12.5/nvim-linux-x86_64.tar.gz
tar xzf nvim-linux-x86_64.tar.gz
sudo mv nvim-linux-x86_64/bin/nvim /usr/local/bin/
sudo mv nvim-linux-x86_64/share/* /usr/local/share/ 2>/dev/null || true配置 — LazyVim
LunarVim 项目已不再活跃,转用社区更活跃的 LazyVim —— 它是基于 lazy.nvim 构建的 Neovim 配置框架,开箱即用、插件齐全且高度可定制。
安装
先备份原有 Neovim 配置:
# required
mv ~/.config/nvim{,.bak}
# optional but recommended
mv ~/.local/share/nvim{,.bak}
mv ~/.local/state/nvim{,.bak}
mv ~/.cache/nvim{,.bak}克隆 LazyVim Starter:
git clone https://github.com/LazyVim/starter ~/.config/nvim删除 .git 目录,以便后续接入自己的版本控制:
rm -rf ~/.config/nvim/.git启动 Neovim:
nvim剪贴板配置
方案一:传统方式(X11 / WSL 转发)
X11 转发在移动网络或弱网环境下有时会有卡顿,且需要后台常驻一个 X11 服务。此方案适合本地 Linux 或 WSL 等有系统剪贴板的环境。
Linux 下:
sudo apt install xclip在 ~/.config/nvim/init.lua 中加入:
vim.opt.clipboard:append { 'unnamedplus' }
vim.g.clipboard = {
name = 'xclip',
copy = {
['+'] = 'xclip -selection clipboard',
['*'] = 'xclip -selection primary',
},
paste = {
['+'] = 'xclip -selection clipboard -o',
['*'] = 'xclip -selection primary -o',
},
cache_enabled = 1,
}Windows WSL 中:
下载 win32yank 并移动到 /usr/local/bin,然后配置:
vim.opt.clipboard:append { 'unnamedplus' }
vim.g.clipboard = {
name = 'win32-clipboard',
copy = {
['+'] = 'win32yank.exe -i',
['*'] = 'win32yank.exe -i',
},
paste = {
['+'] = 'win32yank.exe -o',
['*'] = 'win32yank.exe -o',
},
cache_enabled = 1,
}方案二:OSC 52 协议(免 X11,更纯粹、无网络延迟)
推荐
现代终端(包括 Termux)和编辑器都原生支持 OSC 52 协议,通过 ANSI 转义序列直接在 SSH 连接中携带剪贴板数据。适合远程开发场景,免去 X11 转发的延迟和带宽问题。
Neovim (>= 0.10) 原生支持 OSC 52。在远端服务器的 ~/.config/nvim/lua/config/options.lua中加入:
vim.g.clipboard = {
name = 'OSC 52',
copy = {
['+'] = require('vim.ui.clipboard.osc52').copy('+'),
['*'] = require('vim.ui.clipboard.osc52').copy('*'),
},
paste = {
['+'] = require('vim.ui.clipboard.osc52').paste('+'),
['*'] = require('vim.ui.clipboard.osc52').paste('*'),
},
}
vim.opt.clipboard = "unnamedplus"关于粘贴
OSC 52 的粘贴依赖终端支持,绝大多数现代终端在开启相应权限后可用,但少数终端只允许从本地剪贴板发送、不允许接收。
tmux 下使用 OSC 52
常见坑
tmux 作为终端复用器,默认会拦截并过滤掉内部程序发送的转义字符。Neovim 发出的 OSC 52 剪贴板控制码会被 tmux 吞掉,传不到最外层,导致在 tmux 里复制失效。
解决办法:在远端服务器的 ~/.tmux.conf 中开启剪贴板透传支持。
第一步:编辑 ~/.tmux.conf
# 1. 允许 tmux 读写并向外转发终端剪贴板
set -s set-clipboard on
# 2. 允许转义序列直接透传给外层终端(tmux 3.3+ 强烈建议开启)
# set -g allow-passthrough on
# 3. 告诉 tmux 外部终端支持 OSC 52 剪贴板协议(Ms 扩展)
set -as terminal-overrides ',*:Ms=\E]52;%p1%s;%p2%s\007'第二步:使配置生效
set -s(server 级别)的选项需要重新加载配置文件或完全重启 tmux 服务才能生效,二选一:
# 方式一:在已打开的 tmux 会话中重新加载(快捷键前缀 C-b : 后输入)
source-file ~/.tmux.conf
# 方式二:彻底重启 tmux(推荐)
tmux kill-server
tmux第三步:验证
在 tmux 内部打开 Neovim,选中文本执行 yy(或 "+y),切到外部 App 直接粘贴,应该就能正常工作了。
快捷键
# 移动行: alt-j alt-k
# 移动窗口:ctrl+w hjkl
# nvim-tree快捷键见:https://github.com/nvim-tree/nvim-tree.lua/blob/master/doc/nvim-tree-lua.txt