Vim 问题集合:退出、中文乱码、复制到系统剪贴板等高频坑

工具与效率415 阅读约 4 分钟

学 Vim 路上会反复被同几个问题绊住,多数和「模式」或「配置」有关。这篇把高频坑汇总成一份排错清单。

怎么退出 Vim(经典之问)

Esc 回到 Normal 模式,再:

:w     保存
:q     退出
:wq 或 :x   保存并退出
:q!    不保存强制退出
ZZ     保存并退出(Normal 模式直接按)

退不出去基本都是因为还在 Insert 模式——先按 Esc 是万能第一步。

粘贴代码变成阶梯状

从外部复制代码粘进 Vim,缩进层层叠加、糊成一团。原因是 Vim 把粘贴当成「逐字输入」触发了自动缩进。解法是先开 paste 模式:

:set paste
" 粘贴…
:set nopaste

或者一劳永逸:在 .vimrc 设个开关键 set pastetoggle=<F2>,粘贴前按 F2。(Neovim 用系统剪贴板寄存器粘贴则无此问题。)

复制到系统剪贴板(在 Vim 里复制,外面粘不到)

Vim 的 y 默认存进它自己的寄存器,和系统剪贴板是两回事。要互通需用 + 寄存器:

"+y      复制选中内容到系统剪贴板
"+p      从系统剪贴板粘贴

前提是 Vim 编译时带了 +clipboard,检查:

vim --version | grep clipboard   # 要看到 +clipboard 或 +xterm_clipboard

macOS 自带 vim 常是 -clipboardbrew install vim 装的带剪贴板支持。想让 y 直接走系统剪贴板可设 set clipboard=unnamedplus

中文乱码

文件里中文显示成乱码,多为编码设置问题。在 .vimrc 设好编码:

set encoding=utf-8
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8

fileencodings 让 Vim 按列表顺序尝试识别文件编码,能兼容老的 GBK 文件。

退格键 / 方向键失灵

  • Backspace 删不动set backspace=indent,eol,start,允许退格删除缩进、换行和插入前的字符。
  • 方向键在 Insert 里乱跳成 ABCD:老式终端兼容问题,set nocompatible(关闭 vi 兼容模式)通常能解决;当然更建议练 hjkl 戒掉方向键。

搜索高亮关不掉

搜索后整屏高亮很烦:

:noh      临时关掉当前高亮(nohlsearch)

可映射到一个顺手的键,搜完一键清。

小结

Vim 的高频坑大多有固定解:退不出先 Esc:wq;粘贴变形用 :set paste;跨系统复制用 "+y/"+p 并确认 +clipboard;中文乱码配 encoding/fileencodings;退格失灵设 backspace。把这些写进 .vimrc,新手期的卡点基本一次性扫平。

相关文章

评论 (3)

L

Leo

实操跟下来一次过,赞

北岛

刚好工作里要用,太及时了

A

Aria

学到了,谢谢补充