vim 配置与使用
Vim 的使用
至于 vim 是什么就无需多做介绍了, 直接进入使用说明好了:
最基本的操作 – 使用 vim 打开一个指定的文件[doge]: vim filepath
其他基本用不着的打开文件操作
1 | 打开指定文件,并将光标移动到指定行(eg. 5) |
当然如果只是想简单用一下 vim 编辑一丢丢内容,那么只需要知道以下操作即可:
vim filepath
打开目标文件- 按
i
键 - 开始编辑
- 编辑完成按
ESC
- 敲
:wq
或者按两下Z
键 (Shift + z) 保存退出
如果想学习一下 vim 的使用:
Vim 学习资料:
- vimtutor 👉 vim 安装后自带的教程
- 📘 missing-semester
- 🔗 https://danielmiessler.com/study/vim/
Vim Mode
首先是介绍 Vim 的四种基本的模式,以及在各个模式下比较常用的一些操作
Normal Mode
- vim 的默认模式,使用 vim 打开文件之后默认进入的就是这个模式
- 在这个模式下不能像 Sublime、VSCode 那样直接对文件进行编辑操作,但可以通过快捷键进行编辑(比如删除行、复制行、删除单个字符、移动光标、粘贴等)
- 另外如果要切换到其他模式,都需要先回到 Normal Mode
Normal Mode 常用操作
后面所有
Ctrl +
的组合键都用vim配置文件中的形式表示,即<C-...>
【大小写不敏感】
光标移动 | 作用 |
---|---|
h |
往左移动 |
j |
往下移动 |
k |
往上移动 |
l |
往右移动 |
gg |
移动到首行 |
G |
移动到尾行 |
mG |
移动到第m行(这里m代指一个数字) |
0 |
到行首 |
^ |
到行首第一个非空白字符 |
$ |
到行末尾 |
w |
移动到下一个单词起始处 |
b |
移动到上一个单词起始处 |
f< |
跳转到目标字符处(这里是<) |
<C+f> |
向下翻屏 |
<C+b> |
向上翻屏 |
<C+u> |
向下翻半屏 |
<C+d> |
向上翻半屏 |
分屏操作 | 作用 |
---|---|
<C+w> s |
上下分割,打开当前文件 |
:sp filepath |
上下分割,打开新文件(Command Line Mode) |
<C+w> v |
左右分割,打开当前文件 |
:vsp filepath |
左右分割,打开新文件(Command Line Mode) |
<C+w> h |
切换到左边的窗口 |
<C+w> j |
切换到下边的窗口 |
<C+w> k |
切换到上边的窗口 |
<C+w> l |
切换到右边的窗口 |
<C+w> w |
切换到下一个窗口 |
基本操作 | 作用 |
---|---|
y |
复制选中的内容 |
yn |
复制包括当前行在内往下n行的内容(这里n代指数字) |
yip |
复制当前段落内容 |
yy |
复制当前行 |
p |
粘贴到光标后 |
P |
粘贴到光标前 |
x |
删除光标所在的字符 |
dd |
删除当前行 |
dn |
删除包括当前行在内往下n行的内容(这里n代指数字) |
dw |
删除从光标所在位置开始的一个单词 |
D |
删除从光标所在位置开始到行末尾的内容 |
u |
undo |
<C+r> |
redo |
. |
重复上一次操作 |
ZZ |
保存并退出(大写Z) |
不常用的折叠代码块操作
折叠操作 | 作用 |
---|---|
zc |
折叠代码块 |
zo |
打开折叠 |
zr |
展开所有折叠 |
za |
打开/关闭折叠 |
zn |
禁用折叠 |
zN |
启用折叠 |
1 | :set foldmethod = indent # 用缩进表示折叠,适用于Python |
- 详细的说明可以直接查文档:
:help folding
Insert Mode
- 在这个模式下可以直接对文件内容进行编辑
- 进入方式: 在 Normal Mode 下按
i
进入 Insert Mode- 这里的
i
实际上是指在当前光标之前插入文本,其实还有一些常用的进入 Insert Mode 的按键:- 用
a
也可进入 Insert Mode,这里则是在光标之后插入文本 - 用
o
(小写字母o)是在当前行下方插入新的一行并进入 Insert Mode - 用
O
(大写字母O)是在当前行上方插入新的一行并进入 Insert Mode - 用
S
是删除掉当前行并进入 Insert Mode - 用
C
是删除从当前位置到行尾的字符并进入 Insert Mode
- 用
- 还有很多进入 Insert Mode 的方式,可以使用
:help inserting
查询
- 这里的
- 退出方式:在 Insert Mode 下按
ESC
即可切换回 Normal Mode- 同样退出方式也有多种,
ESC
只是其中一个<C-c>
也是可以的<C-[>
也可,效果跟ESC
一样
- 同样退出方式也有多种,
- 进入方式: 在 Normal Mode 下按
Command Line Mode
- 在这个模式下可以在末行输入命令来对文件进行一系列操作(搜索、高亮、替换、保存、退出等等)
- 前面提到的使用
:help xxxx
查询就是在这个模式下执行的 - 进入方式:
- 在 Normal Mode 下按下
:
键即可进入 Command Line Mode,在末行也可以看到输入的这个:
- 在 Normal Mode 下按下
- 退出方式:
- 命令执行完自动会返回到 Normal Mode
- 不想执行已经键入的内容也可直接
<C-c>
返回到 Normal Mode
- 前面提到的使用
- 如果想要搜索内容,则可在 Normal Mode 下按
/
键(逆向搜索的话是?
),然后输入 search pattern 回车即可搜索- 光标会定位到搜索结果处,如果有多个,可按
n
键跳转到下一个匹配项,按N
跳转到上一个匹配项
- 光标会定位到搜索结果处,如果有多个,可按
Command Line Mode 常用操作
基本操作 | 作用 |
---|---|
:w |
保存 |
:wq |
保存并退出 |
:q! |
不保存强制退出 |
:e filepath |
打开文件 (在当前窗口打开) |
:bn |
切换缓冲区下一个文件(打开多个文件时) |
:bp |
切换缓冲区上一个文件(打开多个文件时) |
:tab filepath |
在新标签页打开文件 |
:noh |
取消搜索匹配的高亮显示 |
:! |
执行系统命令 |
:s |
替换文本 |
- 在 Command Line Mode 下可以执行命令进行一些复杂操作
- 例如要将当前行中的
abc
替换成efg
::s/abc/efg/g
这里末尾的g
表示所有匹配项都要替换,如果要忽略大小写则是指定i
- 例如要将当前行中的
- 更多的命令查文档学习即可(😅别的也不会了,这些暂时也够用了)
Range
- 在默认情况下,像
:d
,:y
,:s
这样的命令都是作用在当前行上,:w
这样的命令是作用在整个文件上,其实可以通过使用 range 来指定命令的作用域。 - 详细的说明:
:help range
- 这里就随便举几个常用的例子好了:
- 例如要删除第3行到第5行的数据:
:3,5d
- 例如要复制第6行到最后一行的数据:
:6,$y
, 这里$
代表末行 - 例如要从整个文件中将所有的
abc
替换成efg
::%s/abc/efg/g
, 这里%
代表所有行 - 例如要在第3行到第6行头部添加注释符
//
::3,6 normal i//
- 例如要删除第3行到第5行的数据:
Visual Mode
- 在这个模式下可以选择需要操作的文本, 在批量注释的时候能用到
- 进入方法:
- Character mode:
v
(小写v) - Line mode:
V
(大写V) - Block mode:
Ctrl + v
- Character mode:
- 进入方法:
三种模式的对比
直接看图体会吧:
- 选好要操作的区域之后按
:
进入 Command Line Mode 继续进行命令操作
打造一个适合自己的 vim
vim 是可以整出❀来的,各种插件主题安排上,可以打造出一个用起来很爽的 IDE,如果自己懒得折腾,也可以直接上 vimplus;如果想自己折腾,那这里推荐一些好用的插件:
插件/主题推荐
- 首先第一步,装 vim 的插件管理器 👉 vim-plug
- 一个非常轻量化的插件管理器
- 一句命令把 plug.vim 下载到
.vim
的autoload
目录即安装完毕
1 | curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ |
- 找主题 👉 https://vimcolorschemes.com/
- 个人觉得不错的几个主题(都有airline、YouCompleteMe的主题配色):
- 好看的启动页 👉 startify
- 好看的 vim 状态栏 👉 vim-airline
- 网上冲浪找到的
airline
配置: best_airline_settings
- 网上冲浪找到的
- 分割线(对齐) 👉 indentLine
- 目录树 👉 nerdtree
- undo撤销树 👉 undotree
- 文件整体结构展示 👉 tagbar
- 代码自动补全 👉 YouCompleteMe
- git支持插件 👉 fugitive
- 括号自动补全/删除 👉 auto-pairs
- 模糊搜索插件 👉 LeaderF
- 代码片段(模板) 👉 Ultisnips
- 快速注释 👉 nerdcommenter
- 代码语法高亮插件 👉 vim-polyglot
在不重启vim的情况下重载配置文件:
:source $MYVIMRC
个人用的插件集合
.vimrc
中的 vim-plug
插件列表
.vimrc
中的 vim-plug
插件列表1 | call plug#begin() |
个人使用的 .vimrc
配置
🤔完整的配置文件备份在这里
这里就放一点不带插件配置的基本设置内容好了(内容不再更新, 新的在👆):
.vimrc
基本配置
.vimrc
基本配置1 | " 语法高亮 |
关于配置文件的详细解释
set nocompatible
有无必要写在 vimrc 中?- 当 vim 检测到有
.vimrc
时会默认关闭 vi 兼容,所以根本用不着加这个 - 可查看官方文档中的解释:
:help nocompatible
- 当 vim 检测到有
syntax on
vssyntax enable
syntax enable
不会覆盖先前的highlight
设置,可以将:highlight
命令放在它前面;syntax on
则会用默认的高亮颜色覆盖先前的配置- 可以查看官方文档中的解释:
:help syntax-on
- 按键映射设置相关,形如
<C-n>
的解释:- 查看官方文档:
:help key-notation
- 查看官方文档:
:help key-notation
中一部分可能较为常用的内容
:help key-notation
中一部分可能较为常用的内容1 | key-notation key-codes keycodes |
- 按键映射中
map
、noremap
、nnoremap
有何区别?- 这里有个回答: What are the differences between the map, noremap, abbrev and noreabbrev commands?
map
与noremap
的区别在于noremap
是非递归版本, 只解析一次;nnoremap
则是指定在 Normal Mode 下才生效的按键映射
- 也可直接看文档:
:help map-overview
- 这里有个回答: What are the differences between the map, noremap, abbrev and noreabbrev commands?
使用过程中的一些小问题
.vimrc
懒人专用配置
.vimrc
懒人专用配置1 | let &t_SI .= "\<Esc>[?2004h" |
- 遇到稀奇古怪的高亮显示问题(例如 Dockerfile 中指令后
[""]
的引号被隐藏且引号内的内容被高亮显示)- 原因: 缺少支持的语法高亮
- 解决方案: 安装插件解决 -> vim-polyglot