这里介绍Vim的常用快捷键、配置语法及IDE下的Plugin配置
常用快捷键
移动
方向键
- 上:k
- 下:j
- 左:l(小写的L)
- 右:h
行头、行尾
- 跳转到一行的头部:0(数字0)
- 跳转到一行的尾部:$
第一行、最后一行
- 跳转到文本的第一行:gg
- 跳转到文本的最后一行:G
行内查找
- 跳转当前行中光标右侧的指定字符:f[欲find查找的字符]。例如,fm命令表示跳转到光标右侧的字符m处
- 跳转当前行中光标左侧的指定字符:F[欲find查找的字符]。例如,Fm命令表示跳转到光标左侧的字符m处
- 跳转当前行中光标右侧的第n个指定字符:[num]f[欲find查找的字符]。例如,3fm命令表示跳转到光标右侧的第3个字符m处
- 跳转当前行中光标左侧的第n个指定字符:[num]F[欲find查找的字符]。例如,3Fm命令表示跳转到光标左侧的第3个字符m处
- Note:冒号; 会重复前一次的f、F命令。 逗号, 会重复前一次的f、F命令,并按反方向执行。例如,先执行fa命令表示跳转到光标右侧的字符a处,再执行 ;命令 会继续跳转到光标右侧的字符a处(即重复执行fa命令),再执行 ,命令 则会跳转到光标左侧的字符a处(即按反方向执行fa命令)
插入
- 当前行的下方插入新行,并进入插入模式:o(小写的O)
- 当前行的上方插入新行,并进入插入模式:O(大写的o)
- 当前行的行尾处插入,并进入插入模式:A
- 当前行的行头处插入,并进入插入模式:I(大写的i)
- 在当前光标后进入插入模式:a
CV大法
- 复制当前行:yy
- 粘贴:p
删除
- 删除当前行,并复制被删除的行:dd
- 删除当前行的所有文本,并在当前行进入插入模式:S
- 删除当前字符,并复制被删除的字符:x
- 删除当前字符,并进入插入模式:s
文本对象命令
删除内部命令di
di系列命令可以理解为delete inner删除内部的内容。例如,di[命令 表示删除[]里的所有内容。其它以此类推,具体如下:
- 光标位于’’之中时,删除’’之间的所有内容:di’
- 光标位于””之中时,删除””之间的所有内容:di”
- 光标位于()之中时,删除()之间的所有内容:di(
- 光标位于[]之中时,删除[]之间的所有内容:di[
- 光标位于{}之中时,删除{}之间的所有内容:di{
- 光标位于<>之中时,删除<>之间的所有内容:di<
- 光标位于词中时,删除当前处的词:diw。该命令会保留被删除词两侧的全部空格。例如,He<空格><空格><空格>is<空格><空格>dog,当光标位于is中时,执行diw命令后的结果为He<空格><空格><空格><空格><空格>dog
修改内部命令ci
ci系列命令可以理解为change inner修改内部的内容。例如,ci[命令 表示修改[]里的所有内容。故,其会先删除[]里的所有内容,然后在[和]之间处进入插入模式。其它以此类推,具体如下:
- 光标位于’’之中时,先删除’’之间的所有内容,然后在’和’之间处进入插入模式:ci’
- 光标位于””之中时,先删除””之间的所有内容,然后在”和”之间处进入插入模式:ci”
- 光标位于()之中时,先删除()之间的所有内容,然后在(和)之间处进入插入模式:ci(
- 光标位于[]之中时,先删除[]之间的所有内容,然后在[和]之间处进入插入模式:ci[
- 光标位于{}之中时,先删除{}之间的所有内容,然后在{和}之间处进入插入模式:ci{
- 光标位于<>之中时,先删除<>之间的所有内容,然后在<和>之间处进入插入模式:ci<
- 光标位于词中时,先删除当前处的词,然后进入插入模式:ciw。该命令会保留被删除词两侧的全部空格。例如,He<空格><空格><空格>is<空格><空格>dog,当光标位于is中时,执行ciw命令后的内容为He<空格><空格><空格><空格><空格>dog
删除整个命令da
da系列命令可以理解为delete around删除配对的符号以及之间的内容。例如,da[命令 表示删除 [ 、 ] 、 []里的所有内容。其它以此类推,具体如下:
- 光标位于’’之中时,删除’、’和’’之间的所有内容:da’
- 光标位于””之中时,删除”、”、””之间的所有内容:da”
- 光标位于()之中时,删除(、)、()之间的所有内容:da(
- 光标位于[]之中时,删除[、]、[]之间的所有内容:da[
- 光标位于{}之中时,删除{、}、{}之间的所有内容:da{
- 光标位于<>之中时,删除<、>、<>之间的所有内容:da<
Vim配置文件语法
注释
行注释:以”双引号开始
键位映射
可通过map、noremap命令分别创建递归、非递归的键位映射。推荐使用非递归映射,避免发生映射循环。下面示例解释两种映射的区别
1 | map j gg |
- 将j映射到gg上
- 将Q映射到gg上。因为,Q先映射到j上,然后再对j映射到gg上
- 将W映射到j上,而不是gg上。因为其不会再对j进行递归处理
可在map、noremap命令前添加模式字母来创建在指定模式下的映射,常见地:
- Normal 普通模式:可使用 nmap、nnoremap 命令
- Insert 插入模式:可使用 imap、inoremap 命令
- Visual 可视化模式:可使用 vmap、vnoremap 命
- Command Line 命令行模式:可使用 camp、cnoremap命令
Vim中可通过 :help key-notation 命令查看按键表示方式。其中:
1 | <Tab>: 表示tab键 |
组合键表示方式如下:
1 | <C-key>: 表示ctrl键加上相应的按键。例如 <C-a> 表示 shift+a 组合键 |
IDE配置Vim Plugin
IDEA/Pycharm
IDEA、Pycharm环境下安装vim插件——IdeaVim
该插件使用的配置文件为用户目录下的.ideavimrc文件。众所周知,vim配置文件为用户目录下的.vimrc文件。可以直接在.ideavimrc文件中引入.vimrc文件。避免在多处配置
打开用户目录下名为.ideavimrc的文件(如果没有该文件,请手动创建)。在.ideavimrc文件最后一行添加下述代码,使其加载.vimrc配置文件中的配置项
1 | " 加载.vimrc文件 |
Visual Studio Code
在Visual Studio Code环境下安装Vim插件
类似地,Visual Studio Code也可以直接使用.vimrc配置文件。只需进行如下方式设置
配置缩进/反向缩进
在IDEA、Pycharm、Visual Studio Code中,习惯使用Tab、Shift+Tab键进行缩进、反向缩进。当在这些IDE环境中开启vim插件后,会出现无法使用Tab、Shift+Tab键进行缩进、反向缩进。可以在.vimrc配置文件中添加下述键位映射解决。添加配置完毕后,重新打开IDE即可生效
1 | " 普通、插入、可视化模式下:使用Tab、Shift+Tab键进行缩进、反向缩进 |