vim 命令大全

前言

vim文本编辑器,是由 vi 发展演变过来的文本编辑器,使用简单、功能强大、是 Linux众多发行版的默认文本编辑器。本文主要列举了常用的命令,提供文本写作生产力。

基于单词的移动

命令光标动作
w正向移动到下一个单词的开头
b反向移动到当前单词/上一个单词的开头
e正向移到当前单词/下一个单词的结尾
ge反向移到上一个单纯的结尾

基于字符查找移动

行内搜索

命令描述
f{char}正向移动到下一个{char}所在之处
F{char}反向移动到下一个{char}所在之处
t{char}正向移动到下一个{char}所在之处的前一个字符上
T{char}正向移动到下一个{char}所在之处的前一个字符上
命令描述
重复上次字符查找的命令
反转方向查找上次字符的查找命令

文件中搜索

命令描述
/{pattern}跳转到文中下一个pattern出现的地方
?{pattern}跳转到本文件中上一个pattern出现的地方
pattern可以是正则表达式
*等价于/{pattern},pattern是当前光标下的单词
nN快速重复/查找

文本对象与选择区

先按v进入visual模式,再再命令键进行选中

  • a: around 周边

  • i:input 里边

分割符文本对象

命令文本选择区域
a)或ab一对圆括号(parentheses)(v+a+b同时按住)
i)或ib圆括号内部
a}或aB一对花括号{braces}
i}或iB花括号内部
a]一对方括号[brackets]
i]方括号内部
a>一对尖括号
i>尖括号内部
a'一对单引号'single quotes'
i‘单引号内部
a"双引号“double qoutes”
at一对XML标签 tags
itXML标签内部

氛围文本对象

命令描述
iw当前单词
aw当前单词及一个空格
iW当前字串
aW当前字串及一个空格
is当前句子
as当前句子及一个空格
ip当前段落
ap当前段落及一个空行

操作符待决模式(motion)

motion 指:分隔符文本对象和范围文本对象

模式描述命令示例
d{mition}删除模式(delete)diw :删除选中的当前单词
c{motion}修改模式(change)ciw :修改选中的当前单词
y{motion}复制模式 (yank)yiw :复制选中的当前的单词
v{motion}可视模式 (visual)viw
dd删除一行
cc修改一行
yy复制一行

示例

命令描述
dgg删除到第一行(从当前光标所在的行开始删除)
ye复制到单词结尾
d$删除到行尾
dt删除知道分号为止的内容

寄存器与宏

寄存器

vim提供了很多寄存器用于存放内容,可以理解为剪切板,一个字符对应一个寄存器(如a-z,0-9)。通过:reg {register}查看对应寄存器的内容

特别的寄存器:

  •  :默认寄存器,平时复制、删除的内容都存放在里面

  • % :当前文件名

  • . :上一次插入的内容

  • : :上一次执行的命令

指定寄存器

在复制/删除/粘贴等操作前加上"{register}就可以指定本次操作所用的寄存器。常见用途:将想要持久保存的文档放到特定的寄存器中,随时进行粘贴,避免覆盖。

命令描述
"ayy将这一行复制到a寄存器中
"bdiw将单词删除,保存到b寄存器中
"cp将c寄存器中保存的内容粘贴出来

宏(MACRO)录制一些列键盘操作,并允许我们重放这些操作,操作序列存放在指定的寄存器中

  • q{register} :开始录制宏,存放在寄存器{register}中
  • 录制过程中按q推出录制
  • @{register}:重放寄存器register中的操作
  • @@:重放上一次宏操作

建议:让你的宏对连续重放友好

  1. 让你的光标移动更加general
  2. 假设你要在多个特定的位置进行特定的操作,一个好的习惯是在宏录制的最后,跳转到下一个需要编辑的位置。即,宏包括【编辑动作】+【跳转到下一个需要编辑的位置】这样一来,连续重放就可以实现对所有需要编辑的位置进行编辑操作通过大写的寄存器,在宏的后面添加命令。如果宏是重放友好的,允许我们使用[count]@{reg1ster}直接重放count次。

批量操作

命令格式:{count} {action } :数字加动作,重复count次action动作,动作可以是移动动作或编辑动作。

命令描述
4j向下移动4行
3dw连续删除本行3个单词
2yy连续复制两行
4p粘贴4次

跳转

普通跳转

命令描述
^跳转到本行的开始
$跳转到本行的结束
%跳转到匹配的配对符(括号等)处
gg跳转到文件的行首
G跳转到文件的行尾

基于标记的跳转

常用场景:当前需要临时离开光标处,做一些事情后再迅速地回来。mark是a-z的字符

  • m{mark}:把当前位置标记为mark
  • `{mark}:跳转到名为make的标记位置

内置标记:

  • `` :返回跳转前的位置
  • `. :上次修改的位置
  • `^ :上次插入的位置

撤销与重复

命令描述
u撤销上一次操作
ctrl + r撤销撤销的更改(重做)
.重复上一次的命令或修改,适用于重复某一个动作的修改

技巧

命令描述
:set relatetivenumber开启相对行号功能
:set norelativenumber关闭相对行号功能

命令模式

命令模式以行为单位进行处理,通过:进入命令模式

命令格式

:[range] {excommand} [args]

参数说明

  • range: 作用的范围,不给的情况下默认为本行
  • excommand: 特殊命令,适用于Command模式
  • args:后续的参数,视命令而定

命令示例

  • :[range] delete [x] 删除range中的行并将删除的内容保存到寄存器x中,delete简写为d。
  • :[range] yank [x] 复制range中的行到寄存器x中,yank可简写为y
  • :[range] print 将range中的行打印出来,print可简写为p

作用范围指定

命令描述示例
1,3文件的1~3行:1,3 delete (删除文件的1到3行)
. , .+4当前-当前往下4行: . , .+4 yank (复制当前往下4行)
$-3, $文件的最后4行:$-3,$ p (打印文件最后4行)
%代表文件所有行:% d (删除文件所有内容)

复制、移动、粘贴

说明:0作为虚拟行的address,可以用来将内容插入第一行

命令描述
:[range] copy {address}把range范围的行内容复制到address后面
:[range] move {address}把range范围的行内容移动到address后面
:[address] put [x]把寄存器x的内容招贴到address后面

批量操作

normal 命令

命令格式::[range] normal {commands}

命令解释:对range范围中的所有行执行normal模式下的命令 commands

几点说明:

  • range设置为%,可以对整个文件的所有的行执行操作
  • :[range] normal . ,配合.命令效果出色,常用做法是:先做一次修改,再用normal命令在指定的行伤完成相同操作
  • .命令只能记录一次修改,用宏可以实现多个记录操作。即::[range] normal @{register}

命令示例:

命令描述
:1,4 normal I##在1到4行前插入##

global 命令

命令格式::[range] global /{pattern}/[cmd]

命令解释:对range中包含pattern的所有执行command模式下的Ex命令

几点说明:

  • [cmd]:Ex命令,不给的话默认打印print
  • normal命令也是Ex命令。:[range] global /pattern/normal {commands}

命令示例:

命令描述
:% global /TODO/delete删除所有带TODO的行
:% global /api/nomal O//TODO:update在所有带api字符的行上面插入// TODO:update

替换命令

命令格式::[range]s/{pattern}/{string}/[flags]

命令解释:将range范围中所有的pattern替换为string

flags参数说明:

  • g:替换每一行的所有匹配
  • i:忽视大小写
  • c:替换前进行确认
  • n:计数而不是替换

:%s/vim//gn :统计文件中所有vim出现的次数

命令示例

命令描述
:%s/int/char/g将文件中所有行中的int替换为char
:%s/flags//gn统计文件中flags单词出现的次数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值