VIM Commands
July 20, 2019
tags:
命令模式中的基础命令
VIM有大量的命令可供你使用,这里我只主要介绍针对单个文件,尤其是代码文件的编辑中最有用的一些命令。我会根据以下编辑文件的逻辑顺序来介绍:
- 打开文件,以及关于整个文件编辑的设置
- 光标移动到需要编辑的位置
- 进行编辑
- 查找替换
- 使用图形化的选择帮助编辑
首先是打开文件,以及关于整个文件编辑的设置
目的 | 按键 |
---|---|
打开新文件 | :e |
退出 | :q 回车 |
保存 | :w 回车 |
另存为 | :w |
查找帮助 | :h <帮助主题> |
设置搜索中忽略大小写 | :set ignorecase 回车 |
设置搜索显示高亮 | :set hlsearch 回车 |
设置增量查找。边输入边查找已输入的内容 | :set incsearch 回车 |
设置支持方便编辑多文件 | :set hidden 回车 |
:h用来查找帮助文档。VIM的文档很全面,不过从我的经验来看,初学者使用谷歌搜索效果会跟好一些。
:set是在命令行中进行VIM的设置。你也可以把他们写到自己的用户目录下的.vimrc文件里面。
进入文件之后,下一步编辑操作就到了
移动光标
VIM提供了非常细粒度的光标移动命令。在水平移动方面,有一下常用命令:
目的 | 按键 |
---|---|
向左移动一个字符 | h |
向右移动一个字符 | l |
向左移动到上一个单词 | b |
向右移动到下一个单词开头 | w |
向右移动到下一个单词的末尾 | e |
向左移动到上一个大单词(空格分开的叫大单词) | B |
向右移动到下一个单词开头 | W |
向右移动到下一个单词的末尾 | E |
向右移动到下一个字母x,光标放到x上 | fx |
向右移动到下一个字母x,光标放到x前 | tx |
向左移动到本行开头 | 0 |
想左移动到本行第一个不是空格的字符 | ^ |
向右移动到本行结尾 | $ |
下面列举常用的上下移动的光标命令:
目的 | 按键 |
---|---|
向上移动一行 | k |
向下移动一行 | j |
向上移动到文件开头 | gg |
向下移动到文件结尾 | G |
移动到第n行 | nG |
向上翻页 | CTRL+B |
向下翻页 | CTRL+F |
另外还有一些是跟文字单元相关的命令:
目的 | 按键 |
---|---|
跳转到对应的括号 | % |
移动光标到上一个空行 | { |
移动光标到下一个空行 | } |
这些命令都可以用来组合命令。举一个基础的例子:我在编辑一个比较长的代码块,代码块里面没有空行,这时”{”和”}”帮不了忙,我常使用命令5k快速上移5行,用5j快速下移5行。
移动好了光标,下一步是
进行编辑
目的 | 按键 |
---|---|
删除当前字符 | x |
删除当前字符 | X |
删除通用命令 | d |
修改通用命令 | c |
拷贝通用命令 | y |
删除当前行 | dd |
拷贝当前行 | yy |
删除当前行并进入编辑模式 | cc |
取消上一个编辑命令 | u |
重做上一个编辑命令 | CTRL+r |
重复上一个编辑命令 | . |
其中d,c,y三个是通用修改命令,虽然只有三个,但VIM通过组合的方式使得具体操作非常多样化。以下是一些例子:
目的 | 按键 |
---|---|
删除到行尾 | d$ |
删除到文件末尾 | dG |
删除到这一行开头第一个不是空格的字符 | c^ |
修改光标所在位置的单词 | ciw (这个iw是特殊而强大的文件对象定义方法。我在后面会介绍) |
删除到当前行字符串结尾的地方 | ct“ |
最后面的这个ct”我稍微讲解一下。它是编辑命令c和光标移动命令t的组合。比如在下面的一行代码里面,
console.error("No more round to run")
^
光标位于“round”的r字母处后面。ct”这个组合命令中c是命令,前面没有数字部分。后面的文字对象部分是t”的,表示从当前位置到最后的双引号。组合起来的操作就是是把r往后直到双引号的部分全部进行修改。 执行之后,文本变为
console.error("No more r")
^
因为写代码的过程中我常常要修改从当前位置到括号、引号之类的边界,所有类似的常用组合命令还有dt},cT{等。简单三个字母就完成了我想进行的操作。相信你也看出来命令组合的威力了吧。
第四组常用命令是查找/替换命令
目的 | 按键 |
---|---|
向下搜素 | / |
查找当前光标所在单词 | * |
把abc替换成xyz | :%s/abc/xyz/g |
进行查找的过程中,使用n查找下一个,N查找上一个。
这个替换命令,有一些复杂,我稍微讲解一下。这是一个ex风格的命令。前面提到过,ex是对一行文本使用命令进行编辑的工具,是VI的前身。命令中的百分号%后面的部分就是一个ex命令。下面是每一个部分的解释:
:%s/abc/xyz/g
:---------------> 命令行模式
%--------------> 针对所有行运行后面的命令
s-------------> 这个一个Substitute(替换)命令。格式为s///g
abc---------> 被替换串
xyz-----> 新串
g---> s命令的选项,表示在当前行如果有多个被替换传的话,每个都替换
最后一组是可视模式(Visual Mode)
可视模式是VIM中除了命令模式和编辑模式之外的另一个模式。进入这种模式后,当前字符会高亮显示,表示已经被选择,然后你可以使用光标移动命令来调整你选择的文字范围,选择完成之后再使用编辑命令对所选内容进行操作。再次使用上面t”命令为例。我们可以先用命令v进入可视模式,这时字母n被高亮显示。
_
console.error("No more round to run")
^
// 注:字幕上面有横线表示高亮显示。
然后,我输入t”,这时从n到结尾的双引号全部被高亮显示,让我可以确认我的选择是正确的:
_________
console.error("No more round to run") // 字符上面的横线表示该字符高亮显示
^
最后,我再输入编辑命令c,将选择的字符删除并进入编辑模式。最终实现了和ct”一样的效果。这个通过视觉模式进行的操作虽然按键较多,但是让我在进行修改之前有了确认的机会,让我安心了许多。
事实上可视模式一共有三种,v只是其中一种。
命令 | 按键 |
---|---|
基于字符的可视模式 | v |
基于行的可视模式 | V |
基于列的可视模式 | CTRL+v |