vim实用命令

vim实用命令

什么是vim

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具

vim键盘图

在这里插入图片描述

vi/vim 的使用

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:

1. 命令模式:

用户刚刚启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。

常用命令
  • u 撤销上一步操作,类似【Ctrl + z】
  • v 进入可视模式(常用)
    • 进入可视模式选择文本后,可用y复制到0号粘贴板,可用"+y复制到系统粘贴板(未验证)
  • Ctrl + r 重做上个撤销的动作,类似【Ctrl + y】
  • . 小数点,重复前一个动作
  • : 切换到底线命令模式,以在最底一行输入命令
  • 切换到输入模式
    • i 光标插入字符
    • a 光标插入字符
    • o 光标下一行插入字符
  • 移动光标
    • j 光标下移一行
    • k 光标上移一行
    • h 光标左移一格
    • l 光标右移一格
  • 搜索
    • /word1 + ENTER搜索word1,配合n/N继续向/搜索
    • ?word1 + ENTER搜索word1,配合n/N继续向/搜索
  • x 字符删除/剪切
    • x 删除/剪切当前光标所在处的字符
    • 3x 删除/剪切当前光标所在处往后3个字符
  • dd 行删除/剪切
    • dd 删除/剪切当前行
    • 3dd 删除/剪切当前行开始的3
  • yy 行复制
    • yy 复制当前行
    • 3yy 复制当前行开始的3
  • p 光标下一行粘贴数据
    • 如果要粘贴系统粘贴板的数据,则使用"+p(未验证)

2. 输入模式

在命令模式下按下i就进入了输入模式。

常用命令
  • HOME/END,移动光标到行首/行尾
  • ESC,退出输入模式,切换到命令模式

3. 底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

常用命令
  • ESC,退出输入模式,切换到命令模式
  • :w,将编辑的数据写入硬盘档案中,若为:w!则为强制储存(常用)
    • :wq, 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
    • :w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
      • :n1,n2 w [filename]n1n2 行的内容储存成 filename 这个档案
  • :q,离开 vi (常用)
    • :q!,若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
  • :r [filename] 读取filename的内容到光标所在行的下一行
  • :e [filename] 编辑filename这个文档
  • :set nu:set number 设置行号
  • 搜索替换
    • :%s/word1/word2/g 全局搜索word1替换为word2
    • :%s/word1/word2/gc 全局搜索word1,用户确认是否替换为word2,y替换,n跳过
  • 复制copy
    • 5,7 copy 165,7 co 16 将第5-7行复制到16行后
  • 移动move
    • 5,7 move 165,7 mo 16 将第5-7行复制到16行后

4. 扩展使用

vim 中批量添加注释
方法一:块选择模式

注释:

Ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如//#,输入完毕之后,按两下 ESC,Vim 会自动将你选中的所有行首都加上注释,保存退出完成注释。

取消注释

Ctrl + v 进入块选择模式,选中你要删除的行首的注释符号,注意 // 要选中两个,选好之后按 d 即可删除注释,ESC 保存退出。

方法二:替换命令

注释

  • :起始行号,结束行号s /^/注释符/g,无需确认
  • :起始行号,结束行号s /^/注释符/gc,需要确认

取消注释

  • :起始行号,结束行号s /^[注释符]\s//g,无需确认

例:3,11s /^#\s//g

global命令

global命令是Vim最强大的命令之一,将其摸透用熟可以事半功倍

global命令形式
:[range]global/{pattern}/{command}

global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹
配到的行执行命令{command},如果希望对没匹配上的行执行命令,则使用global!或vg lobal命令。

global命令实际上是分成两步执行:

  • 首先扫描[range]指定范围内的所有行,给匹配{pattern}的行打上标记(标记的概念很重要);
  • 然后依次对打有标记的行执行{command}命令;
  • 如果被标记的行在对之前匹配行的命令操作中被删除移动合并,则其标记自动消失,而不对该行执行{command}命令。
global命令使用
  • 倒序文件行
:g/^/m 0

这条命令用行首标记/^匹配文件的所有行(这是查找的一个常用技巧),然后用move命令依次将每行移到第一行(第0行的下一
行),从而实现了倒序功能。

  • 删除偶数行
:g/^/+1 d

这条命令也是匹配所有行,然后隔行删除(其中+1用以定位于当前行的下一行),为什
么是隔行呢?因为在对第一行执行+1 d命令时删除的是第二行,而第二行虽然也被标记
了,但已不存在了,因此不会执行删除第三行的命令。

  • 删除奇数行
:g/^/d|m.

光是:g/^/d显然不行,这会删除所有行,我们需要用move命令把偶数行的标记去掉。

  • 删除空行
:g/^\s*$/d

^\s*$,匹配空行,其中^表示行首,\s表示空字符,包括空格和制表符,*重复0到n个前面的字符,$表示行尾。连起来就是匹配只有空字符的行,也就是空行。


References:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值