由于最近经常需要在服务器端简单修改一些配置文件, 因此有必要了解一下VIM的基本操作. 此外, 目前的主流IDE基本都提供了VIM的键位映射, 虽然这些键位映射的模式并不能等同于VIM, 但大部分基本操作都是支持的. 因此掌握了VIM的基本操作还是能够在其他IDE上提高代码的编辑速度.
目前的个人体验是, VIM适合编辑不太依赖代码补全的项目, 例如Python. 对于需要切换输入法的场景, 例如写博客, 由于多了切换的步骤, 因此不适合VIM. 对于写LeetCode这种可能要手写代码的场景, 可以考虑使用VIM作为IDE.
VIM的一大特色就是需要进行大量的配置才能用的舒服. 以前觉得不适合使用VIM的场景实际上都能够配置解决. 例如中英文切换就可以通过插件自动切换.
由于VIM的操作实在是太多, 根本不可能完全的记住, 所以本文采取需求驱动的方法, 每次遇到一个需求时, 使用查询VIM的相关用法, 并记录再这里. 按照这样的规律进行学习可能更容易记住相关的操作. 所以下面的内容不会按照逻辑顺序组织, 而是按照时间顺序组织.
如上图所示, 给出了VIM大部分常见的操作, 同时每个按键也给了相应的含义, 这有助于记忆每个按键的功能.
对VIM了解的越多, 则从这张图中获得的信息越多
高价值参考资料
基础移动
常见需求 | 指令 | 说明 |
---|---|---|
跳转到文件的指定行 | <N>G /:<N> |
/ |
跳转到指定字符 | f<a> / F<a> |
小写字母f 正向跳转, 大写字母F 反向跳转 |
删除一个单词 | cw |
w 表示移动到单词的末尾位置 |
撤销上一个操作 | u |
/ |
全选 | yG |
即复制当前位置到末尾的全部内容 |
复制字符串 | f"yf" |
首先f" 移动到字符串开始位置, 然后yf" 复制到字符串结束的全部内容 |
删除字符串 | f"dt" |
首先f" 移动到字符串开始位置, 然后dt" 删除 |
标签跳转 | ma / 'a |
m 定义标签, ' 跳转到标签的所在行 |
重新加载文件 | :e |
|
指定文件编码 | :set encoding=utf8 |
标签
VIM可以定义标签, 标签是文本中的一个位置, 可以快速跳转到标签所在的位置
使用指令ma 定义标签a, 使用mA定义标签A. 小写字母只能在单个文件内跳转, 跨文件跳转需要使用大写字母.
使用指令`a 跳转光标到标签a的位置, 使用指令 ‘a 跳转到标签a所在行的行首.
指令 | 作用 |
---|---|
:marks | 查看所有标签 |
:delmarks a | 删除标签a |
:delmarks! | 删除所有标签 |
寄存器
寄存器暂存复制和剪切的结果. 所有的寄存器都是以双引号"
+字母的形式构成. 通常情况下使用的是无名寄存器""
(即寄存器的名称为双引号). 如果想把结果放入某个具体的寄存器, 可以如下操作
指令 | 作用 |
---|---|
"ayy |
将当前行放入寄存器a |
"ap |
粘贴寄存器a的内容 |
:reg |
显示全部寄存器的内容 |
宏
VIM可以将一组动作保存起来, 并在之后将其作为基本指令进行重放.
按下qa
开始录制宏并将宏保存到寄存器a中. 之后可以输入任意的指令序列, 最后回到normal模式再次按下q结束录制.
使用@a
重放a
中记录的操作.
宏的名字空间和寄存器是独立的, 不会相互影响
例如在rebase代码时, 可能看到如下的代码
1 | pick commit4 |
如果想从第二行开始将所有的pick替换为s, 则可以在第二行开头的位置执行qaces<ESC>jq
录制一个替换的宏, 然后输入2@a
将这个宏直接重放两次
搜索和替换
在正常模式输入/
进入搜索模式, 此时直接搜索需要的字符串, 即可在文本中进行搜索. 输入要查找的字符串并按下回车进入搜索模式, 此时按n
查找下一个, 按N
查找上一个. 查找过程支持正则表达式.
VIM使用:substitute
指令进行搜索和替换, 这一指令通常简写为:s
, :s
将当前行的指定字符串替换为另外一个字符串, 格式如下
1 | :s/<find-this>/<replace-with-this>/<flags> |
以将字符串tthe替换为the为例, 不同模式具有如下的格式
指令 | 作用 |
---|---|
:s/tthe/the |
在当前行第一个匹配的位置进行替换 |
:s/tthe/the/g |
在当前行进行全部替换 |
:15,42s/tthe/the/g |
在15行到42行之间的内容中进行替换 |
:%s/tthe/the/g |
全局替换 |
:%s/tthe/the/gc |
全局替换并并在每一处询问是否替换 |
键位映射
键位映射的基本指令是map
指令. 在这个指令的基础上可以添加一些前缀来限定范围, 前缀列表如下:
前缀词 | 效果 |
---|---|
nore | 非递归映射 |
n | 表示在普通模式下生效 |
v | 表示在可视模式下生效 |
i | 表示在插入模式下生效 |
c | 表示在命令行模式下生效 |
因此norenmap
表示在normal模式下的非递归映射.
把最常用的操作映射为最舒服的按键方式
IDEA使用VIM
IDEA系列的IDE均提供了VIM插件, 可以通过配置该插件实现使用VIM的效果. 首先需要安装如下的插件
- ideaVIM: 提供VIM的核心功能
- IdeaVimExtension: 提供中英文输入法自动切换功能
上述插件均可直接在插件市场下载. 安装完成后在IDE的右下角有一个VIM的图标,点击这个图片可以快速启用和关闭插件. 同样地, 需要写个配置文件来做相关的设置. 点击VIM图标可以打开配置文件, 输入如下内容:
1 | " 显示当前模式 |
配置文件来自博客: ideavim 配置说明.
VsCode配置VIM
- 下载插件
Vim
- 下载输入法切换工具im-select, 将
- 将im-select放置到合适的位置(不需要是PATH路径)
- 打开设置, 搜索
vim
进行配置 - 打开设置, 搜索
vimrc
进行配置
一套配置下来也能用, 但是和Markdown All for One插件存在一些冲突, 因此用来写Markdown有些不合适
VIM基础配置
对于服务器上的VIM,因为大部分时候都是简单改配置,所以不需要太过复杂的配置文件,可以使用如下的简化版配置文件。VIM的配置位于用户目录的.vimrc文件, 建议在其中加入如下的内容
1 | syntax on " 开启语法高亮 |
如果只是使用VIM的键位映射, 那么就没必要进行配置了
参考资料
最后更新: 2024年04月24日 15:50
版权声明:本文为原创文章,转载请注明出处