vim 命令学习(基础篇)

时间:2022-12-24 18:02:21

【1】三种模式

vi的三种模式:命令模式、末行模式、编辑模式。

三种模式相互切换逻辑与命令图:

vim 命令学习(基础篇)

1.命令模式是vi的默认模式(即每打开一个文件时的初始模式)。

2.命令模式切换至末行模式,末行模式切换至命令模式。

(1)命令模式->末行模式

命令:冒号(英文)

(2)末行模式->命令模式

命令1:按两下esc键

命令2:删除末行的全部命令

备注:两种命令等价,任选其一即可。

3.命令模式切换至编辑模式,编辑模式切换至命令模式。

(1)命令模式->编辑模式

命令1:按键i: 在光标所在字符前开始插入

命令2:按键a: 在光标所在字符后开始插入

命令3:按键o: 在光标所在行的下面另起一新行插入

命令4:按键s: 删除光标所在的字符并开始插入

命令5:按键I: 在光标所在行的行首开始插入(如果行首有空格则在空格之后插入)

命令6:按键A: 在光标所在行的行尾开始插入

命令7:按键O: 在光标所在行的上面另起一行开始插入

命令8:按键S: 删除光标所在行并开始插入

备注:各命令均可切换至编辑模式,具体情况活学活用。

(2)编辑模式->命令模式

命令:按一下esc键

备注:末行模式不能直接切换至编辑模式,必须先切换到命令模式,再进行切换至编辑模式。

【2】命令模式

命令模式基本的操作有:光标的移动、删除、复制、粘贴、更改、翻屏、退出等。

1、光标的移动

(1)光标移到最后一行 [G] (大写G)

(2)光标移到第一行 [两个g] (小写g)

(3)光标移到指定行 [行数 + G] (大写G)

(4)光标上移或下移 [行数 + ↑ 或 行数 + ↓]

(5)光标移至当前行内容的首字符 [^]

(6)光标移至当前行尾(行内容的尾字符) [$]

等价于:光标移至当前行尾(行内容的尾字符)[End]

(7)光标移至当前行首(第一个字符) [0](数字0)

等价于: 光标移至当前行首(第一个字符)[Home]

(8)光标左移一个字符 [h]

(9)光标右移一个字符 [l]

(10)光标上移一行 [k]

(11)光标下移一行 [j]

2、删除

(1)删除光标下的字符 [x](小写x)

(2)删除光标后的#个字符(包括当前光标下的字符) [#x](小写x)

(3)删除光标左边的字符 [X] (大写X)

(4)删除光标左边的#个字符(不包括当前光标下的字符) [#X] (大写X)

(5)删除光标所在的行 [dd](注意:删除后行号重置,即后面的行内容上移)

(6)删除从光标所在行向下的#行 [#dd]

(7)删除当前行 [D](注意:当前行置空,保留当前行号)

3、复制

(1)复制光标所在位置的一个字 [yw]

(2)复制光标所在位置的#个字 [#yw]

(3)复制光标所在的一行 [yy]

(4)复制从光标所在行数的#行 [#yy]

4、粘贴

(1)粘贴 [p] (粘贴在所在行的下一行)

(2)取消操作 [u]

5、更改

(1)更改光标所在位置的一个字 [cw]

(2)更改光标所在位置的#个字 [#cw]

6、翻屏

(1)向下翻屏 [Ctrl+f]

(2)向上翻屏 [Ctrl+b]

(3)向前翻半屏 [Ctrl+d]

(4)向后翻半屏 [Ctrl+u]

7、退出

(1)在命令模式时,若想退出vi,可以直接输入命令:ZZ (注意:两次大写Z)

备注:此命令类似末行模式的[:wq],即先保存后退出vi。

【3】末行模式

末行模式中基本的操作有:保存、另存、退出、查找、替换。

1、保存

命令:[:w] (w即write)

作用:将已做的更改进行保存。

2、另存

命令:[:w + 文件路径]

作用: 另存和保存命令基本相似,区别在于另存需要指定文件的保存路径。

3、退出

(1)命令:[:q] (q即quit)

作用:不保存退出。

1.1 若当前文档没有任何改变,此命令可直接退出vi。

1.2 若当前文档已编辑,使用此命令直接退出时,vi的窗口最末行显示如下信息:

E37: No write since last change (add ! to override) [翻译:自上次更改以来没有写入(添加!为忽略)]

发现其实vi并不退出,而是提醒用户当前文档有修改但没有保存,等待用户继续输入命令。

若的确不想保存修改且要立马退出,可选择强制退出,命令:[:q!](其中!表示强制)

(2)命令:[:wq]

作用:先将vi的当前编辑的内容保存,然后再退出vi。

(3)命令:[:w NewFileName]

作用:把vi当前文档内容保存到指定的新文件NewFileName中,而当前文档保持不变。

(4)命令:[:x]

作用:该命令功能同命令模式下的ZZ命令相同。即同[:wq]。

4、查找(搜索)

命令: /或?+ 需要查找的字符串(/用于正向往下搜索,?用于反向往上搜索)

例如: /abcde 进入搜索abcde字符串的模式

作用:可使用n(查找下一个)、N(查找上一个),改变光标位置。查找的位置会高亮

5、替换

(1)替换命令的完整形式 【:[range]s/src/des/[flags]】

1.1 [:s/src/des] 把当前行中,src指定的第一个字符串替换成字符串des。src可以是正则表达式。

1.2 [range]

有以下一些表示方法:

不写range : 默认为光标所在的行。

. : 光标所在的行。

1 : 第一行。

$ : 最后一行。

33 : 第33行。

'a : 标记a所在的行(之前要使用ma做过标记)。

.+1 : 当前光标所在行的下一行。

$-1 : 倒数第二行。(从这条规则可以说明:可以对某一行加减某个数值来取得相对的行)。

22,33 : 第22~33行。

1,$ : 第1行 到 最后一行。

1,. : 第1行 到 当前行。

.,$ : 当前行 到 最后一行。

'a,'b : 标记a所在的行 到 标记b所在的行。

% : 所有行(与 1,$ 等价)。

?chapter? : 从当前位置向上搜索,找到的第一个chapter所在的行。(其中chapter可以是任何字符串或者正则表达式)

/chapter/ : 从当前位置向下搜索,找到的第一个chapter所在的行。(其中chapter可以是任何字符串或者正则表达式)

备注:上面的所有用于range的表示方法都可以通过+、-操作来设置相对偏移量。

1.3 [flags]

这里可用的flags有:

无 :只对指定范围内的第一个匹配项进行替换。

g :对指定范围内的所有匹配项进行替换。

c :在替换前请求用户确认。

e :忽略执行过程中的错误。

备注:

上面的所有flags都可以组合起来使用。

比如:gc表示对指定范围内的所有匹配项进行替换,并且在每一次替换之前都会请用户确认。

(2)替换当前行中的内容 [:s/des/to/] (s即substitude)

[:s/des/to] 将当前行中的第一个des,替换成to。如果当前行含有多个des,则只会替换其中的第一个。

[:s/des/to/g] 将当前行中的所有des都替换成to。

[:s/src/des/gc] 将当前行中的所有des都替换成to,但每次替换之前都会询问请求用户确认此操作。

备注:命令中的src和des都可以是任何字符串,其中src还可以是正则表达式。

(3)替换某一行的内容 [:#s/src/des/g]

[:.s/src/des/g] 在当前行进行替换操作。

[:#s/src/des/g] 在第#行进行替换操作。

[:$s/src/des/g] 在最后一行进行替换操作。

(4)替换某些行的内容:[:10,20s/src/des/g]

[:10,20s/src/des/g] 对第10行到第20行的内容进行替换。

[:1,$s/src/des/g] 对第一行到最后一行的内容进行替换(即全部文本)。

[:1,.s/src/des/g] 对第一行到当前行的内容进行替换。

[:.,$s/src/des/g] 对当前行到最后一行的内容进行替换。

[:'a,'bs/src/des/g] 对标记a和b之间的行(含a和b所在的行)进行替换。

其中a和b是之前用m命令所做的标记。

(5)替换所有行的内容 [:%s/src/des/g]

[:%s/src/des/g] 对所有行的内容进行替换。

(6)替换字符串中有/字符

可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

[:s#src/#des/#] 替换当前行第一个 src/ 为 des/

【4】编辑模式

编辑模式只可以进行编辑输入。

【5】扩展

补充几个常用命令

1、行号显示问题

一般情况下,vi通过在末行模式中添加:set nu命令进行行号的显示,但这并不是全局的,通常在下一次打开文件时,行号会自动消失。

为了便于操作,我们通常会修改vi的配置文件,来使得行号显示对全局生效。

vi的配置文件位于当前用户的家目录。若没有可自行创建。文件名称为.vimrc。

在当前文件输入:set nu 即可实现全局行号显示有效。

2、异常关闭处理

在文件没有正常关闭的情况下,如未保存直接通过远程窗口关闭。

解决此问题的方式是:删除该文件的交换文件

提示信息已经十分明确。交换文件.vimrc.swp在文件未被正常关闭时,自动创建。

所以使用命令:[rm -f .vimrc] 即可

备注:一般交换文件的通常格式为: 文件名.swp

3、重做/撤销(末行模式)

如果想要撤销操作,输入[:u]

取消撤销为:ctrl + r

进行多步撤销为: 数字 + u

4、退出方式:wq与:x有何区别?

在实际开发中建议使用:x方式退出。两者区别在于:

(1):wq方式无论文件是否有修改都会对文件的最后修改时间进行重置。

(2):x只有在文件内容真正改变时才会重置文件最后修改时间。

5、ctrl + s 的梗

现象:由于习惯在windows下写程序按ctrl+s保存代码,所以在用vi/vim时,想保存时也习惯性的按ctrl+s

结果:终端如同死掉了一样卡住没有任何反应。

分析原因:vi/vim终端按ctrl+s:终止屏幕输出(即停止回显),你敲的依然有效,只是看不见。

作用其实就像登录系统时输入密码,是不是看不见你敲的东东而已。

解决方案:

遇到如上卡死情景:在vi/vim终端,按ctrl+q:恢复屏幕输出,你刚才敲的内容都会显示出来了。

6、vim编辑器,经常出现字符上有黄色阴影部分

比如,刚刚不小心在命令行模式同时按了[shift + #]之后,光标下的字符串出现了黄色阴影。

经过学习,发现可以在编辑器命令行模式执行[: nohlsearch] 即可解决。

【6】总结

VI是UNIX操作系统 和 类UNIX操作系统中最通用的全屏幕纯文本编辑器。

附vim键盘图:

vim 命令学习(基础篇)

Good Good Study, Day Day Up.

顺序 选择 循环 总结

vim 命令学习(基础篇)的更多相关文章

  1. Docker虚拟化实战学习——基础篇(转)

    Docker虚拟化实战学习——基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker   Docker虚拟化实战和企业案例演练 深入剖析虚拟化技 ...

  2. vim 命令学习(高级篇)

    [1]打开文件方式 (1)vim +n filename 作用:打开文件,并定位到第n行 例如:vim +103 2019-02-26-errorrepeat.txt 效果:打开2019-02-26- ...

  3. [转]C++学习–基础篇(书籍推荐及分享)

    C++入门 语言技巧,性能优化 底层硬货 STL Boost 设计模式 算法篇 算起来,用C++已经有七八年时间,也有点可以分享的东西: 以下推荐的书籍大多有电子版.对于技术类书籍,电子版并不会带来一 ...

  4. Git命令汇总(基础篇)

    自己用Git有一段时间了,随着项目越来越多,功能分支也随之增加,从简单的基础命令到随心所欲,需要自己不断地去尝试总结,下面来分享一下我的Git使用总结. 本章基础篇主要讲解一些Git代码提交流程和Gi ...

  5. VIM学习一: VIM命令学习及插件介绍

    一.光标移动及编辑命令(含查找替换) [打开关闭窗口] :e file或:open file       打开新文档 :q或者ctrl+w+q         关闭当前视图的窗口 :tab split ...

  6. 系统自带vim命令学习教程

    [环境] [干货分享] vim或者vi命令在很多linux环境中自带一款学习教程,其教程说明语言还是随系统变化. 输入vimtutor这个命令会打开一款学习神器. 打开之后显示如下,vimtutor一 ...

  7. Flume搭建及学习(基础篇)

    转载请注明原文出处:http://www.cnblogs.com/lighten/p/6830439.html 1.简介 该文主要是翻译官方的相关文档,源地址点击这里.介绍一下Flume的一些基本知识 ...

  8. Bat 脚本学习 (基础篇)

    [转]Bat 脚本学习 2015-01-05 14:13 115人阅读 评论(0) 收藏 举报 基础部分: ============================================== ...

  9. Linux学习——————基础篇

    一.linux试用 1.使用man或者info查询 2.超级简单的文本编辑器:nano 3.sync:数据同步写入磁盘,将内存中的数据写入磁盘 3.惯用的关机命令:shutdown /sbin/shu ...

随机推荐

  1. .Net Enum

    /// <summary> /// 将enum转换成List<Model.Models.SelectViewModels>,即html的select标签使用的数据 /// &l ...

  2. C&num; 最原始的tree 递归使用

    ; i < dr.Rows.Count; i++)             {                 )                 {                     n ...

  3. python学习笔记16(错误、异常)

    一.什么是错误,什么是异常 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象.当错误中断流程时,该程序将尝试寻找异常处理程序(一段告诉程序如何对错误做出响应的代码),以帮助 ...

  4. IBM WebSphere MQ 通道类型配置

    IBM WebSphere MQ 通道类型配置 初学MQ,四种常见通道,windows下操作 目录 Sender--Receiver Server-Receiver Server-Requester ...

  5. 第四章SignalR自托管主机

    第四章SignalR自托管主机 SignalR服务器通常在IIS的Asp.Net应用程序上承载,但它也可以使用自托管库来作为自托管的主机来运行(就像控制台应用程序或Windows服务那样)与Signa ...

  6. 浅解ARC中的 &lowbar;&lowbar;bridge、&lowbar;&lowbar;bridge&lowbar;retained和&lowbar;&lowbar;bridge&lowbar;transfer

    文章来源:http://www.outflush.com/2015/03/introduction-of-arc-bridge-type-transfer/ 在对 bridge 相关的修饰符解说前.首 ...

  7. luci 随笔

    entry()函数, 第一个参数是定义菜单的显示(Virtual path). 第二个参数定义相应的处理方式(target). alias是指向别的entry的别名,from调用的某一个view,cb ...

  8. new和newInstance区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp55     在初始化一个类,生成一个实例的时候:newInstance() ...

  9. linux下修改rm命令防止误删除

    前言:相信很多朋友都遇到过在linux下用rm命令误删除文件的时候,此刻的心中仿佛有无数的羊驼在奔腾.那么怎么防止这种情况发生呢?当然是有方法的,我们可以写一个shell脚本,改变一下rm命令的作用. ...

  10. POJ - 2387 最短路

    思路:用dijkstra算法,是无向图. AC代码: #include <cstdio> #include <cmath> #include <cctype> #i ...