首页 > 其他分享 >vi 常用命令

vi 常用命令

时间:2024-08-18 16:15:56浏览次数:8  
标签:删除 vi 模式 命令 常用命令 移动 替换 光标

原文: https://www.cnblogs.com/qianxudetianxia/archive/2012/07/07/2578361.html

1. 移动指令
    (1). h j k l, 方向键,记忆技巧:左右方向的是最左边和最右边的,j向下打了个勾,所以是向下键,剩下的k就是向上的键了。
    (2). b, before,上一个单词(词首)
           w, word,下一个单词(词首)
           e,  end,下一个单词(词尾)
    注意这些小写的命令由字母,点,数字,下划线划分,还有这三个对应的大写字母的命令,B,W,E,类似的意思,但是是以空格区分移动的。总而言之,大写的移动范围要大。
    (3). gg 首行
             G 尾行,这两个命令用的较多
    (4). n%  跳到n%的那行
    (5). ^/0  到行首,我有时特别喜欢0,非常清晰简明的命令
          $ 到行尾
    (6). - 非空白行首向上移动
          + 非空白行首向下移动
    (7). 行移动

1 2 3 4 5 6 nj                      //向下移动n行 nk                      //向上移动n行 nh                      //向左移动n列 nl                      //向有移动n列 n_                      //向下移动n-1行,并光标移动到非空白行首 n-                      //向上移动n行,并光标移动到非空白行首

  (8).通过查找字符移动

1 2 3 4 5 6 fx/Fx                   //向后/前查找字符x,行内跳转很有用 tx/Tx                   //向后/前查找字符x //fx/Fx和tx/Tx的区别是用f光标停留在x上,用t光标停留在x的前面一个上   ;                       //执行上次的fFtT ,                       //反方向执行fFtT,这两个有意思

2. 插入,替换,删除
    (1). 学会a和i混用,不要只会用i进入插入模式,有时a进入插入模式后更方便,比如插入键盘右边的字母符号,用a的话,左右手配合起来效率更高。
    (2). 学会I和A,快速进入行首和行尾插入模式,特定时刻用起来超爽!
这个很好理解,小写的i是光标前,大小的I是整行前面,o/O类似,画面很清晰。
    (3). 学会o和O混用,不要只会用o进入下行编辑:
           (3.1). 进入上行编辑,大写的O更快,而不是ko,双手比单手要快!
           (3.2). 第一行前面想插入一行时,O比其他任何操作更直接和快速(不要先回到开头<+插入模式>+回车)
    (4). r 快速替换字符,最大的好处是不许要切换模式,节省了大量时间,非常有用!(R,这个命令我用的少,有的时候用的特别混乱,就不说了)
           s 删除光标后一个字符并进入插入模式。该命令提供了r命令+进入插入模式的快速实现方法。
    (5). c 这个命令很强大,归类说明一下

1 2 3 4 cm                     //m指的是前面的移动命令,类似的有dm,ym,g?m,gum,gUm                        //改变内容(m定义了改变范围)并进入插入模式,这里说的改变就是删除,举例说明: cw                     //删除光标后一个单词并进入插入模式 cl                     //删除光标后一个字母并进入插入模式

    (6). cc和S 修改当前行,意思是删除该行所有字符内容,但保留行首空格
           D和C 删除该行光标后所有内容,无论字符还是空格,这个命令我用的很多:代码审核格式化代码时,删除空行的空格和行尾空格。
    (7). 学会结合t这个命令

1 2 3 4 t                      //till的意思,这是我最喜欢的命令之一 dt"                    //行内删除直到","不删除 ct)                    //行内改变直到),)不删除 ... ...

    (8). 学会x和X混用,分别是向前删除和向后删除字符
    (9). :rd 删除第r行

3.查找

1 2 3 4 5 6 7 #                      //向下一个查找结果 *                      //向下一个查找结果 //在#/*之后按n/N可以重复/反向重复它们的命令   //下面这两个命令在编程时,很有用 gd                     //跳转到光标变量的定义位置(局部变量) gD                     //跳转到光标变量的定义位置(全局变量)

4. 撤销和恢复

1 2 u                      //撤销 ctrl + r               //恢复

5. 滚动

1 2 3 ctrl + e/y             //向下/上一行一行的滚动 ctrl + d/u             //向下/上半页半页的滚动 ctrl + f/b             //向下/上一页一页的滚动

6. 可视模式(选择块)
    可视模式其实非常有用,它的选择很灵活,而且视觉效果上看着和鼠标选择一样,学习成本低,但是功能强大。
    (1). v 进入可视模式
    (2). shift + v 也就是大写的V,可视模式的行选择,整行整行的选择,用于刚好整行或者大篇幅内容的处理比较方便。
    (3). ctrl + v 可视模式的列选择,比行选择模式更加细化,可选择连续的列进入操作
           选择块模式需要和其他命令结合:

1 2 3 4 5 6 7 V + G                  //选择当前行一直到文本结尾 V + G + d              //删除当前行一直到文本结尾 V + G + y              //复制当前行一直到文本结尾 V + gg + d             //删除当前行一直到文本开头 V + gg + y             //复制当前行一直到文本开头 ctrl+v + <移动>+ d      //删除选择的列 ctrl+v + <移动>+ y      //复制选择的列

    (4). gv 选中上次的选中区域
    (5). 选中单词,句子,段落:

1 2 3 4 5 6 vaw                   //选中一个单词(word) vas                   //选中一个句子(sentence) vap                   //选中一个段落(paragraph) viw                   //选中一个单词(word) vis                   //选中一个句子(sentence) vip                   //选中一个段落(paragraph)

    (6). 选中括号:

1 2 vab                   //选择()里面的内容, 包括小括号 vaB                   //选择{}里面的内容,包括大括号

7.执行shell命令

1 2 3 //记住这两种用法,你尝到它们的甜头的 :sh                   //打开shell,可执行shell命令,输入exit退出shell返回到vim :!cmd                 //直接执行shell

 比如上篇文章中提到的自动化打包脚本,我修改了代码后,需要执行一下这个脚本编译一下,但是我还不想完全退出vim,因为我还需要继续修改,就可以使用

1 2 3 4 5 :sh                   //打开一个终端 ./build.sh            //执行build.sh exit                  //退出终端,继续vim编辑 //或者 :!./build.sh          //在vim窗口直接执行build.sh脚本,然后按Enter或其他命令继续 

    是不是很方便!

8. 专题一:快速选中、删除、复制、修改引号或括号内的内容

1 2 3 4 5 //以下操作一定要熟记,能大大提高你编辑文本的效率 ci’、ci”、ci(、ci[、ci{、ci<           //分别更改这些配对标点符号中的文本内容 di’、di”、di(或dib、di[、di{或diB、di<  //分别删除这些配对标点符号中的文本内容 yi’、yi”、yi(、yi[、yi{、yi<           //分别复制这些配对标点符号中的文本内容 vi’、vi”、vi(、vi[、vi{、vi<           //分别选中这些配对标点符号中的文本内容

9. 专题二:替换
查找并替换操作使用的太频繁了,下面针对这个专题从网上或书籍上收集了替换的几个常用的强大用法:

1 2 3 4 5 6 7 8 9 10 11 12 //语法 /**  * 说明  * range表示行数,如果是%表示所有行  * s表示substitution,替换的意思  * flag表示标志,取值g,i,c等  * g表示global,全部  * i表示ignore,忽略大小写  * c表示confirm,一个一个交互确认替换  * count表示从当前行到接下来的第几行,表示范围  */ :[range]s/{pattern}/{string}/[flag] [count]

(1). 全部替换
参数g实现全部替换,否则只替换一个

1 :%s/{old-pattern}/new-text/g

(2). 行内替换
%代表所有行,去掉%表示当前行,只替换当前行

1 :s/{old-pattern}/new-text/g

(3). 指定行范围替换
对1到10行的结果替换

1 :1,10s/{old-pattern}/new-text/g

(4). 可视模式替换
如果你觉得数行数比较麻烦,可以使用可视模式,首先进入可视模式,然后选择行
列,最后输入:自动进入:'<,'>
后面加上s/{old-pattern}/new-text/g,则只替换选择区域的结果

1 :'<,'>s/{old-pattern}/new-text/g

(5). 整词替换,而不是部分匹配的单词
对单词匹配模式外包一个<和>

1 :s/\<blog\>/weibo/g  //替换blog,但是cnblog,blogs则不会替换

(6). 多项替换
同时对多个匹配都替换成某一字符串

1 :%s/\(good\|nice\)/awesome/g  //good和nice都将被替换成awesome

(7). 确认式替换
参数c让替换进行交互请求,需要你选择y,n,a,l,q

1 2 3 4 5 6 7 8 9 /**  * 选择说明:  * y 替换且跳转到下一个匹配结果  * n 不替换且跳转到下一个匹配结果  * a 替换所有并退出交互模式  * l 替换当前并退出交互模式  * q 退出交互模式  */ :s/{old-pattern}/new-text/gc

(8). 行首插入行号
把行首^替换成行号,可自定义具体形式

1 :%s/^/\=line(".")/g

10. 专题三:大小写转换
    讲这个,主要是觉得这个问题挺有意思的。

1 2 3 4 5 6 7 ~                    //改变当前字符并自动切换到下一个字符,大写变小写,小写变大写,可以一直按 gum                   //转化为小写,m指移动命令,如:                       //guw   光标后的一个单词小写化                       //guG   光标所在行到最后行全部小写化                       //gut=  光标后直到=之间的字符小写化                       //罗嗦一句,gu还可以与可视模式结合,小写化所选区域 gUm                   //转化为大写,用法同上

11. 专题四:录制
    这个其实很简单,但也是很强大的功能,单独柃出来说一下。

1 2 3 4 5 6 //为操作定义宏或者取别名 //这个命令的强大之处在于使重复复杂指令的简单化了 q                     //按下q开始录制 x                     //x是这个录制的寄存器,x可以是其它字符 dd                    //删除当前行,这个操作可以自定义其他复杂的操作 q                     //录制结束,现在dd这个操作被定义到了@x这个命令里了

12. 专题五:数字增减
    
这个小技巧还挺有用的,比如说定义了一系列static final变量,而且时不时要中间插入一些新的变量,这些值一般都是递增的,这时候这个技巧绝对比数字替换要方便。

1 2 3 //Normal模式下执行 Ctrl + a           //自增1 Ctrl + x           //自减1

13. 小结
    工善其事,先利其器。
    先想到这些,必然有很多遗漏,后面想到了什么,我会随时添加更新进来。

   

标签:删除,vi,模式,命令,常用命令,移动,替换,光标
From: https://www.cnblogs.com/zxdplay/p/18365751

相关文章

  • C++(cv::VideoCapture::open())
    在OpenCV中,cv::VideoCapture类用于从视频文件或摄像头捕获视频流。cap.open()是cv::VideoCapture类的一个成员函数,用于打开视频源。以下是关于cap.open()的详细介绍:函数定义cv::VideoCapture::open有两个主要的重载形式:boolopen(intindex)这个重载版本用于打开一......
  • 2024 NVIDIA Summer Camp Day1:构建RAG多模态AI Agent
    下载材料和课件等课程相关资料下载链接:https://pan.baidu.com/s/15Y-gmsfeYCgKF-M3TJZVgg?pwd=fafe提取码:fafe 1.课件链接:https://pan.baidu.com/s/15JTy9CqnesXSlPiwwrUmjA?pwd=1111 提取码:1111 2.phi3量化大模型链接:https://pan.baidu.com/s/10HqxpkJmSyg-Bb......
  • ubuntu常用命令
    安装deb文件命令sudodpkg-i文件名.deb 查找文件find-nametest_detectors_regression.impl.hppsudofind/-name"clion.sh"sudofind/-name"clion.png" ubuntu去掉文件夹的锁 问题描述:配置环境过程中莫名其妙文件带锁,不能读写甚至不能删除操作。遇到过不少......
  • Visual Studio使用Git进行代码版本管理
    一、VisualStudio创建一个项目1、在VisualStudio中创建一个项目,我创建的项目名称是"mainApi"二、Gitee中新建仓库1、右上角点击【个人头像】,选择【新建仓库】2、输入对应的信息,点击【创建】-(1)输入仓库名称,一般与本地程序名称一致-(2)介绍一下该仓库是干什么的,也可以不......
  • lit tailwindcss vite模板
    pnpmcreatevite@latestmy-project----templatelitcdmy-projectpnpminstall-Dtailwindcsspostcssautoprefixersass-embeddednpxtailwindcssinit-ptailwindcss.config.js:/**@type{import('tailwindcss').Config}*/exportdefault{core......
  • vivado无工程生成固件及时序报告
    做IC一般都是使用linux系统进行编写代码,综合仿真等操作。因此没有图像化界面只跑脚本是提高效率的一种方式,笔者以前一直使用图像化界面的方式对Vivado工程进行编译综合,后来学会了windows下也可以使用脚本直接无工程生成bit文件,时序报告等。步骤大致如下,rtl.list在上文有......
  • VisualVM第二章-Threads
    ThreadsTab页介绍线程Tab页分三个部分:线程数量统计、线程取样、线程状态线程数量统计左上角统计了当前存线程数以及守护线程数。ThreadDump线程取样,点击ThreadDump可以对当前程序运行的线程进行取样分析。取样文件默认存储在临时目录:你还可以对当前dump文件另存......
  • UsbTreeView 查看USB端口模式(速率)
    USB版本和对应速度USB1.1USB2.0FullSpeed12MbpsUSB2.0USB2.0High-Speed480MbpsUSB3.0USB3.1Gen1USB3.2Gen15GbpsUSB3.1USB3.1Gen2USB3.2Gen210GbpsUSB3.2USB3.2Gen2x220GbUSB3.2Gen1和USB3.2Gen2拥有USBTYPE-A、USBTYPE-B......
  • Redis中Set数据类型常用命令
    目录1.添加元素2.移除元素3.检查成员是否存在4.获取集合成员5.获取集合成员数量6.随机获取集合中的一个成员7.集合运算8.集合的移值9.提供集合的随机元素在Redis中,Set是一种无序且不重复的字符串集合。1.添加元素SADDkeymember[member...]:向集......
  • Redis中Sorted Set数据类型常用命令
    目录1.添加元素2.获取成员3.获取成员的分数4.删除元素5.获取集合的大小6.获取成员的排名7.按分数范围获取成员8.按排名范围获取成员9.增减分数10.删除指定分数范围的成员11.获取分数的范围在Redis中,SortedSet(有序集合)是一种重要的数据类型,它的每......