0%

Vim Cookbook

这里介绍Vim的常用快捷键、配置语法及IDE下的Plugin配置

abstract.png

常用快捷键

移动

方向键

  • 上: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
2
3
map j gg
map Q j
noremap W j
  • 将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
2
3
4
5
6
<Tab>: 表示tab键 
<Esc>: 表示esc键
<CR>: 表示enter回车键
<BS>: 表示backspace键
<Space>: 表示space空格键
<F1>: 表示功能键F1。其他功能键F2~F12以此类推

组合键表示方式如下:

1
2
3
4
<C-key>: 表示ctrl键加上相应的按键。例如 <C-a> 表示 shift+a 组合键
<S-key>: 表示shift键加上相应的按键。例如 <S-a> 表示 shift+a 组合键
<D-key>: 表示Mac的command键加上相应的按键。例如<D-a> 表示 command+a 组合键
<A-key>: 表示Mac的option键加上相应的按键。例如<A-a> 表示 option+a 组合键

IDE配置Vim Plugin

IDEA/Pycharm

IDEA、Pycharm环境下安装vim插件——IdeaVim

figure 1.png

该插件使用的配置文件为用户目录下的.ideavimrc文件。众所周知,vim配置文件为用户目录下的.vimrc文件。可以直接在.ideavimrc文件中引入.vimrc文件。避免在多处配置

打开用户目录下名为.ideavimrc的文件(如果没有该文件,请手动创建)。在.ideavimrc文件最后一行添加下述代码,使其加载.vimrc配置文件中的配置项

1
2
" 加载.vimrc文件
source ~/.vimrc

Visual Studio Code

在Visual Studio Code环境下安装Vim插件

figure 2.png

类似地,Visual Studio Code也可以直接使用.vimrc配置文件。只需进行如下方式设置

figure 3.png

配置缩进/反向缩进

在IDEA、Pycharm、Visual Studio Code中,习惯使用Tab、Shift+Tab键进行缩进、反向缩进。当在这些IDE环境中开启vim插件后,会出现无法使用Tab、Shift+Tab键进行缩进、反向缩进。可以在.vimrc配置文件中添加下述键位映射解决。添加配置完毕后,重新打开IDE即可生效

1
2
3
4
5
6
" 普通、插入、可视化模式下:使用Tab、Shift+Tab键进行缩进、反向缩进
nnoremap <Tab> >>_
nnoremap <S-Tab> <<_
inoremap <S-Tab> <C-D>
vnoremap <Tab> >gv
vnoremap <S-Tab> <gv
请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝