4. Vim编辑器:Vim的三种模式、基本编辑操作、配置与插件管理
说到嵌入式Linux开发,Vim是绕不开的编辑器。我见过不少新手,一进终端看到Vim界面就懵了——想退出都不知道怎么退。其实Vim没那么可怕,它只是思维方式跟普通编辑器不太一样。
我个人习惯把Vim比作「三态开关」:普通模式、插入模式、可视模式。你只要搞懂这三个状态怎么切换,基本操作就通了。下面我们一个一个来看。
4.1 Vim的三种模式
Vim的核心设计理念就是「模式」。说白了,键盘在不同模式下干不同的事。普通模式下按字母是命令,插入模式下按字母才是输入文字。
| 模式 | 作用 | 进入方式 | 退出方式 |
|---|---|---|---|
| 普通模式 | 导航、复制、粘贴、删除等操作 | 启动Vim默认进入 | 按 Esc 从其他模式返回 |
| 插入模式 | 输入和编辑文本内容 | 按 i、a、o 等 |
按 Esc |
| 可视模式 | 选中文本块,然后批量操作 | 按 v(字符)、V(行)、Ctrl+v(块) |
按 Esc |
-- INSERT -- 就是插入模式,显示 -- VISUAL -- 就是可视模式,什么都不显示就是普通模式。
嗯,这里要注意:普通模式才是Vim的「家」。做完任何操作,我都习惯按一下 Esc 回到普通模式。这个习惯能帮你避免很多误操作。
4.2 基本编辑操作
基本操作我分成四类来讲:移动、编辑、保存退出、搜索替换。你把这四类练熟了,日常编辑就没问题了。
4.2.1 光标移动
在普通模式下,移动光标不用方向键,用 h j k l。为什么?因为手指不用离开键盘主区域,效率高很多。
h— 左移一个字符j— 下移一行k— 上移一行l— 右移一个字符w— 跳到下一个单词开头b— 跳到上一个单词开头0— 跳到行首$— 跳到行尾gg— 跳到文件开头G— 跳到文件末尾:n— 跳到第n行(比如:42跳到第42行)
我的经验: 在嵌入式开发中,经常要查看内核日志或设备树文件,这些文件动辄几千行。用 gg 和 G 快速定位头尾,用 :n 跳转到报错行号,比鼠标滚轮快十倍。
4.2.2 编辑操作
编辑操作的核心是「组合」。Vim的命令可以组合使用,比如 d2w 表示「删除两个单词」。
i— 在光标前插入a— 在光标后插入o— 在下一行插入新行dd— 删除当前行yy— 复制当前行p— 粘贴到光标下方u— 撤销Ctrl+r— 重做x— 删除光标所在字符
举个例子:你想把第5行到第10行复制到文件末尾。怎么做?
:5,10y // 复制第5到10行
G // 跳到文件末尾
p // 粘贴
我曾经在调试一个U-Boot启动脚本时,需要把一段配置重复粘贴到多个位置。用Vim的复制粘贴,配合 . 命令(重复上一次操作),几秒钟就搞定了。要是用鼠标复制粘贴,得来回切窗口,效率差远了。
4.2.3 保存与退出
这是新手最头疼的部分。记住这几个就够了:
| 命令 | 作用 |
|---|---|
:w |
保存文件 |
:q |
退出(未修改时) |
:wq |
保存并退出 |
:q! |
强制退出,不保存 |
:x |
保存并退出(同 :wq) |
:q,结果Vim提示「No write since last change」。这时候别慌,用 :q! 强制退出就行。记住:! 在Vim里表示「强制执行」。
4.2.4 搜索与替换
搜索和替换在嵌入式开发中非常常用。比如你要在设备树文件里查找某个GPIO引脚配置:
/keyword— 向下搜索 keyword?keyword— 向上搜索 keywordn— 跳转到下一个匹配N— 跳转到上一个匹配:%s/old/new/g— 全局替换 old 为 new:s/old/new/g— 替换当前行所有匹配
举个例子,把文件里所有的 uart0 改成 uart1:
:%s/uart0/uart1/g
你想想看,如果文件有几百行,手动改得改到什么时候?一条命令就搞定了。
4.3 Vim配置
Vim的配置文件是 ~/.vimrc。每次启动Vim,它都会读取这个文件。我建议你从最简单的配置开始,慢慢加。
下面是我个人常用的基础配置:
" 显示行号
set number
" 语法高亮
syntax on
" 自动缩进
set autoindent
set smartindent
" Tab键宽度设为4个空格
set tabstop=4
set shiftwidth=4
set expandtab
" 搜索时忽略大小写
set ignorecase
set smartcase
" 显示匹配的括号
set showmatch
" 启用鼠标支持(在终端中)
set mouse=a
小提示: 配置文件的注释用 " 开头。每加一条配置,最好写一句注释说明它是干什么的。这样几个月后你回头看,还能想起来当初为什么加它。
把这些内容写入 ~/.vimrc,重启Vim就能生效。你也可以在Vim里执行 :source ~/.vimrc 立即生效,不用重启。
4.4 插件管理
Vim本身功能已经很强了,但加上插件,它能变成真正的IDE。我推荐用 vim-plug 来管理插件,它轻量、配置简单。
4.4.1 安装vim-plug
在终端执行:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
4.4.2 配置插件
在 ~/.vimrc 里添加插件配置:
call plug#begin()
" 文件树浏览
Plug 'preservim/nerdtree'
" 状态栏美化
Plug 'vim-airline/vim-airline'
" 代码注释插件
Plug 'preservim/nerdcommenter'
" Git集成
Plug 'tpope/vim-fugitive'
call plug#end()
4.4.3 安装插件
保存 ~/.vimrc 后,在Vim里执行:
:PlugInstall
vim-plug 会自动下载并安装所有列出的插件。安装完成后重启Vim,就能看到效果了。
我的建议: 嵌入式开发中,我必装的插件是 NERDTree(文件浏览)和 vim-airline(状态栏)。前者让你在终端里像IDE一样浏览文件树,后者能清晰显示当前模式、文件名、行号等信息。别一上来就装几十个插件,先装两三个用顺手了再加。
4.5 Vim模式与操作流程总览
下面这张图总结了Vim的三种模式切换和核心操作流程,你可以把它当作速查表:
这张图把三种模式的关系和核心操作都串起来了。你刚开始用Vim时,可以把这张图打印出来贴在工位上。遇到不知道怎么操作的时候,扫一眼就明白了。
最后说一句:Vim的学习曲线确实陡,但一旦跨过那个坎,你会发现它真的快。我见过很多嵌入式工程师,从「被迫用Vim」到「离不开Vim」,这个过程通常只需要两周。别急,慢慢来。