vim
vim 是 Linux 操作系统下、几乎可以说是最为流行的、基于终端的文本与代码编辑器。vim 也有 GUI 版本,但是在终端中使用还是其更广为人知的用途。
vim 已经流行至任何常识入门 Linux 或者只是单纯使用 Linux 的人都有必要学习其基础用法。至少,要学会如何退出 vim 吧(微笑)~
如何退出???
- 按下
ESC退出编辑模式; - 输入
:wq保存并退出当前文件,或输入:q直接退出当前文件。
安装
检查是否存在
你的 Linux 上很可能已经存在 vim 了,可以尝试在终端输入 vim 来检查。如果终端变成了一个很奇怪的形状,那么就是已安装,并且进入 vim 编辑器了。

进入 vim 时默认为普通模式,可以直接输入 :q 退出 vim。由于当前没有打开任何文件,因此输入 :wq 会导致报错,不过你也可以试试反正没什么损失(?)
如果显示未找到命令,则需要安装 vim。
Ubuntu 从 apt 安装
在终端中运行 sudo apt update 与 sudo apt install vim 即可安装最新版本的 vim。
使用
打开文件
命令 vim filename 可以打开名为 filename 的文本文件。注意,Linux 系统中的文件不以后缀严格区分格式,但是建议还是保留良好的习惯哈。
也可以直接用 vim path/to/your/file 打开相对路径下的文本文件,然后就可以开始愉快的编辑啦。
vim 编辑器打开时默认处于普通模式,其主要拥有以下三种模式:
- 普通模式:打开时的默认模式,此时可以使用键盘上的众多按键进行操作,或者输入
:以进入命令模式; - 编辑模式:在普通模式下按下
a在当前光标后追加进入编辑模式,或者按下i从当前光标位置插入进入编辑模式;在当前模式下按下ESC回到普通模式;键盘上的所有字母按键被用于编辑文件; - 命令模式:键盘上的所有字母按键被用于输入命令,命令会显示在终端底部。
在 vim 中,普通模式下,a 和 i 可以进入编辑模式,方向键或者 h j k l 四个按键用于移动光标。到目前为止,你就已经可以通过终端和键盘,操作 Linux 上的所有文件,不再需要鼠标了。
这实际上也是 vim 的目标之一,可以让用户脱离鼠标,完全使用键盘进行工作。
嘛,不过对于我们来说可能脱离鼠标还是太不现实了。没关系,每个人都有自己的理解嘛。
以 root 权限编辑文件
Linux 中,除了 /home 目录下的你的文件之外,其他目录归属于系统,用户无权编辑。因此,全局安装软件包需要 sudo 来使用 root 权限。
vim 也可以搭配 sudo 来实现编辑系统文件,只需要 sudo vim filename 即可。
你知道吗!
在 WSL 中,尽管可以使用 Windows 资源管理器管理 Linux 系统中的文件,但是对于属于 Linux 系统的文件,Windows 资源管理器也无权编辑。
是的,就算你给它 Windows 管理员权限也不行。
是的,所以你必须要在 Linux 中使用 root 权限编辑才行。
不是不是,WSL 中的 Linux 系统和 Windows 系统是两个不同的系统,不能混为一谈的。
打开代码文件
vim 内置了针对许多许多许多许多语言的语法高亮,比如下面是使用 vim 打开 .vue 文件的效果:

注意只提供内置的语法高亮,而不是完整的代码补全,那样的话也太超模了哈。
不过这样已经足够简单地编辑改改配置文件之类的了~
基本快捷键
重复一遍,vim 被设计为可以完全依靠键盘、脱离鼠标地工作,因此可以暂时放下鼠标了~
约定
由于快捷键数量众多,下面我们做此约定:
- 小写字母如
a表明直接在键盘上按下按键 A; - 大写字母如
N表明在键盘上按下组合键Shift+按键 N。
实际上,在英文小写输入状态下按下 Shift 时,输入的字母都是大写字母,因此其实也挺容易理解的对吧~
还没完呢:
gt表明:首先按下按键 G 并松开,然后按下按键 T;gT表明:首先按下按键 G 并松开,然后按下组合键Shift+按键 T。- (
Ctrl+w)+w表明:首先按下Ctrl+按键 W 的组合键,然后松开这两个键,再按下按键 W。
(主要还是为了完全使用键盘, vim 的快捷键太多了……)
移动光标
在普通模式中,使用键盘 h j k l 向四个方向移动光标,也可以使用四个方向键。在编辑模式中,只能使用方向键。
使用 w 移动到后一个单词的头部,使用 e 移动到后一个单词的尾部,使用 b 移动到前一个单词的头部。
使用 W 移动到后一个字符串的头部,使用 E 移动到后一个字符串的尾部,使用 B 移动到前一个字符串的头部。这里的字符串是以空格分割的最长连续字符。

在内容非常长的文件中,可以使用 Shift+⬆ 和 Shift+⬇ 来整屏幕地上下滚动,适用于快速浏览文件。
vim 支持多窗口,类似于 IDE 同屏分成几个部分同时显示不同文件的那种。光标无法使用上面的方法跨窗口移动,你需要使用 (Ctrl+w)+w 来让光标在窗口之间移动。
如果需要关闭当前光标所在的窗口,而不退出 vim(即保留最后一个窗口),可以使用 (Ctrl+w)+c。如果需要退出哪怕最后一个窗口,可以使用 (Ctrl+w)+q。
普通模式下切换窗口
你应该在普通模式下使用 (Ctrl+w) 系列快捷键进行窗口操作,否则……如果在编辑模式下,你可能会往窗口里面输入什么奇怪的东西……
另外,普通模式下,Ctrl+其他按键 也绑定了许多操作,可能会肆意修改你的文本内容,按下时需小心。
如果不小心进行了更改,使用 u 可以撤销改动,使用 Ctrl+r 可以重做撤销。
关闭窗口的命令是 :q,保存并退出的命令是 :wq,只保存不退出的命令是 :w,强制退出不保存的命令是 :q!。
进入编辑模式
vim 的默认模式下的光标是一个字符宽度的方块,选中一个字符。
使用 i 插入编辑模式,光标在选中的字符之前,方块与选中的字符重合;使用 a 追加编辑模式,光标在选中的字符之后,方块位于选中字符的右一个字符。
在编辑模式中,键盘上的大部分按键都被用作输入,你只能使用四个方向键来移动光标。与 Windows 中的体验不同,光标必须逐格移动,比如不能通过在最后一行的行首按下 ⬇ 来跳到最后一行的行末。
选中文本
由于无法使用鼠标,你无法在编辑模式下选中文本并复制,或者选中文本然后用鼠标拖着它们移动位置。
你需要首先回到普通模式,然后移动光标到对应的位置后:
- 使用
v进入选中模式。这时移动光标可以选中文本,移动多少就选中多少。 - 使用
V进入多行选中模式,这时上下移动光标可以选中多行文本,移动多少选中多少。 - 选中之后,使用
ydp依次可以复制、删除、粘贴。vim 会在底部提示。 - 如果你需要从 vim 中复制文本并到别处使用(例如从 WSL 中的 vim 内复制文本,在 Windows 中的其他地方
Ctrl+v),需对选中的文本使用++y。 - 完成之后,使用
ESC回到普通模式。
完全体 IDE 配置
你真的需要完全体 vim 嘛?
在 WSL 中,由于可以方便地使用 Windows 上的工具,因此几乎没有配置完全体 vim 并将其作为 IDE 使用的必要哦……
可能配置了很久很久还是不如 VSCode 好用哦……
不过如果你高兴,一切都好说~
你需要安装数量不菲的插件来将 vim 改造为一个功能完备的 IDE,然后再花上很长的时间来熟悉 vim 的操作和你安装的插件的操作,主要花在记住并熟练使用它们的快捷键上面。
我无法评价这是否值得,我也会和你一起尝试熟悉并使用 vim 的,虽然这并不意味着我会放弃那些成熟的 IDE。
插件管理器
首先,安装 vim 插件就是一门技术活。
vim 插件位于 ~/.vim/bundle/ 目录下,其中每一个文件夹都是一个插件。手动安装十分繁琐,因此你需要插件管理器。
插件管理器也是一个 vim 插件,手动安装插件管理器是必须的。vim 可以选择的插件管理器有很多,这里我们选择比较知名的 Vundle。
GitHub:https://github.com/VundleVim/Vundle.vim
首先运行下面的命令,将 Vundle 项目克隆到插件该在的位置。
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim然后编辑 vim 的配置文件 ~/.vimrc。考虑到你应该还没有这个配置文件,你应该先创建它,可以直接使用命令 vim ~/.vimrc 来进入 vim,完成编辑之后保存即可创建此文件。
set nocompatible " required
filetype off " required
" 设置 Vundle 自己的路径
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" 也可以向这个函数传入路径,告诉 Vundle 从哪里加载插件
" call vundle#begin('~/some/path/here')
" 让 Vundle 管理 Vundle,必须
Plugin 'VundleVim/Vundle.vim'
" 插件示范,以下展示了几种安装插件的方法。
" 可以用插件的 GitHub 仓库的用户名与仓库名来指定它,像这样
Plugin 'tpope/vim-fugitive'
" 如果插件的仓库不在 GitHub 上,可以指定一个 git 地址,像这样
Plugin 'git://git.wincent.com/command-t.git'
" 如果插件在本地,可以指定文件路径,像这样
Plugin 'file:///home/gmarik/path/to/plugin'
" 以上三个插件都是示例,理解后请将其注释或删除
" 所有的插件必须写在 vundle#begin() 和 vundle#end() 之间,也就是说插件必须写在本行之上。
call vundle#end() " required
filetype plugin indent on " required
"
" Vundle 的主要命令帮助
" :PluginList - 列出已配置安装的插件
" :PluginInstall - 安装插件。在末尾添加 `!` 以更新(强制安装),后者等效于 :PluginUpdate
" :PluginSearch foo - 搜索 foo。在末尾添加 `!` 来刷新本地缓存。
" :PluginClean - 移除存在但没有被配置使用的插件,需要确认。在末尾添加 `!` 来免除确认步骤。
"
" 你可以在下面继续添加别的配置了~配置文件中的注释以 " 开头。中间的 Plugin 行是演示用的,你应该删除、注释或将他们更改为你需要的插件的地址。下面的每个插件都会提供其安装方式,这里安装插件管理器,所以先把那些玩意注释掉。
如果你使用 fish shell,那么在你高兴的位置加一行 set shell=/bin/bash,让 vim 使用 Bash。
现在,运行安装指令来让 Vundle 安装插件,这一次主要是让它安装自己。今后,每当你向 .vimrc 中添加新的插件之后,都需要运行这个安装指令,Vundle 会自动下载插件并安装。
# 此指令在终端中运行
vim +PluginInstall" 或者在 vim 的命令模式下运行此指令
:PluginInstall插件:LightLine
在 vim 的窗口底部增加一个类似于 VSCode 的文件状态栏。主要是好看,并且更强调地指出当前的 vim 状态。
安装:
Plugin 'itchyny/lightline.vim'如果安装之后没有生效,那么需要额外添加一行配置:
set laststatus=2插件:NERDTree
在 vim 窗口左侧显示目录树的插件,让 vim 从带语法高亮的文本编辑器进化为带语法高亮和文件目录树的文本编辑器。
安装:
Plugin 'preservim/nerdtree'在 vim 的命令模式下输入 NEROTree 即可打开目录树,默认为在主窗口的左侧新建目录窗口,光标会被放置在刚打开的目录树窗口中。在目录窗口中可以通过方向键移动光标,有一套不同的快捷键。
?- 显示 NEROTree 的帮助信息,里面罗列了许多可以在目录窗口中使用的快捷键。o/Enter- 对于文件,在已有的窗口中打开文件;对于目录,将其展开。t- 在新标签页中打开文件。C- 将选中的目录作为根目录,重新打开目录树。p- 返回根目录的上一级目录,将其作为根目录重新打开目录树。P- 返回最顶层的根目录(就是你的 Linux 根目录)。r- 刷新选中目录。R- 刷新根目录。
NEROTree 不会自动处理目录中的文件变化,因此如果你确定有变化(比如你刚刚编译了可执行文件在目录下),则需要手动刷新来在目录树中显示新的文件。
在同时打开多个窗口的情况下,可以使用 (Ctrl+w)+w 让光标在多个窗口之间来回切换。
在同时打开多个标签页的情况下,可以使用 gt 和 gT 向后、向前切换标签页。默认只有在拥有大于一个标签页时才会在顶部显示标签页栏。
插件:YouCompleteMe
在 vim 中提供智能代码补全的插件,让 vim 从带语法高亮的文本编辑器进化为带语法高亮和语法补全的文本编辑器。
YouCompleteMe 的安装比一般插件复杂一些,主要在于需要安装依赖,并运行安装脚本。
首先在 .vimrc 中增加该插件:
Plugin 'ycm-core/YouCompleteMe'使用 Vundle 安装插件。
然后在终端中安装各种编程语言:
# 使用 apt 安装依赖
sudo apt install build-essential cmake vim-nox python3-dev
sudo apt install mono-complete golang nodejs openjdk-17-jdk openjdk-17-jre npm然后前往插件目录下,运行安装脚本:
cd ~/.vim/bundle/YouCompleteMe
python3 install.py --all安装脚本将开始运行,时间可能长达一个小时。安装完成之后,插件 YouCompleteMe 方可使用,并为 C、C++、C#、Java、Python、Go、Rust、Typescript、PHP 等众多语言提供代码补全。
配置示例
还有许多重要的功能没有进行配置,例如 Git 支持、文件内导航、一键运行等。
好消息是,你可以在命令模式下使用 :terminal 在 vim 内打开终端,就像 VSCode 中的内建终端一样,然后在其中输入指令。你甚至可以在 vim 中的终端内打开 vim (划掉)
这样应该可以弥补一些缺陷。你也可以继续安装更多插件并进行更详细配置,这里芒果就先打住了~
" 显示行号
set number
" 设置缩进格数
set smartindent
set tabstop=4
set shiftwidth=4
set expandtab
set softtabstop=4
" 配置文件状态栏
set laststatus=2
" 配置目录树
" 在目录中显示文件行数
let g:NERDTreeFileLines = 1
" 按键绑定
" 使用 Ctrl + N 打开目录树
map <C-n> :NERDTreeToggle<CR>
" 使用 Ctrl + S 保存文件
map <C-s> :w<CR>
" 使用 F2 打开终端(是 Bash)
" 终端要输入 exit 才能关闭,并且退出
map <F2> :terminal<CR>
MangoFanFan_