Vim使用基础篇

2024-06-24 14:08
文章标签 vim 基础 使用

本文主要是介绍Vim使用基础篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。

先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。

目录

看完以后的汇总

1.正常模式(Normal模式)

1.移动光标

2.删除

3.【:】输入符

4.撤销

5.替换

6.重复命令【. ; ,】

7.复制粘贴

8.缩进

2.插入模式 INSERT

3.可视模式 Visual

4.vim内部的文本对象 textobject

5.vimrc设置


看完以后的汇总

1.输入以下字符会在屏幕最下面出现对应的字符,可以输入命令:

【:】

【 / 】

 

2.ctrl+操作

ctrl+g 看行数信息

ctrl+o/i 相当于向前导航 向后导航

ctrl+r 相当于重做(撤销刚刚撤销的)

ctrl+w ctrl+w 切换vim窗口(这里在当用:help 的会用到)

ctrl+v进入面向块的可视模式

number+ctrl+a/数字+ctrl+x 分别对数字进行加number和减number的操作(如果当前光标不在数字上,就是在当前行正向查找到的那个数字再进行加和减的操作,如果找不到不做任何修改)

 

3.善用help

  • 比如输入 【:help w】 ,显示如下图

S代表Shift键,Right代表→键,即按shift→和按小写w是一个作用——向前移动一个单词的意思。

但是exclusive,motion 啥意思?words 和 WORDS啥区别?继续help。

 

  • 输入【:help motion】,如下图

motion指移动光标的那些命令。

motion常常用在operator后面,用来表示operator要操作的字符。后面复杂的用到再看了。

 

  • 输入【:help exclusive】 

出现了两种motion:a character motion 和 linewise motions 应该是面向字符的移动和面向行的移动。

 

  • 输入【:help word】 

w:单词 = 包含字母数字下划线的序列 或者  除了前面这些以外的其他非空白字符组成的序列 

比如 <go!to!school!> 

<,go,!,to,!,school > 分别都是word

 

W:字串 = 非空白字符序列

比如 <go!to!school!> 

<go!to!school!> 就是一个WORD

 

4.记住 operator + motion 的语法

operator有哪些 ——:h operator 查看

 

 


1.正常模式(Normal模式)

任何模式下按ESC就可以进入正常模式,没事就多按几次ESC好了

press <ESC> to make sure that you are in Normal mode

分成几类

1.移动光标

1)基本移动

【motion】:h j k l 左下上右           w  一个词儿           e 这个的词头儿和词尾儿

  更多指令:【数字 + motion】

1)

相当于上下左右箭头的移动

h j k l  左下上右

2)

以word子串为单位 w b e ge

 

PS:

1)以WORD字串为单位  W B E GE

2)word和WORD区别输入【:help word】查看。

3)其实是以WORD为单位移动比较常用

4)也不用记多清楚,这几个字母试就行了

w 正向移动到下一个单词的词头

b 反向移动到当前单词或上一个单词的词头

 

e 正向移动到当前单词或下一个单词的词尾 

常用组合:【ea】——在词尾进入插入模式

 

ge 反向移动到上一个单词的词尾

常用组合:【gea】——在上一个单词的词尾进入 

 

3)

一行的首尾

0移动到行首

^移动到行首,不包括空白字符

$ 移动到行尾

4)

跳转到指定行

 

gg 跳到文件第一行开头

G 跳到文件最后一行

跳到指定行方式:

         数字+G 

         数字+gg

        :数字

 

先通过【ctrl+g】 显示行数等信息

5)

移动屏幕位置

zz,让当前行居屏幕中间显示;

zt,让当前行居屏幕顶部显示;

zb,让当前行居屏幕低部显示;

2)导航移动,匹配移动

1)

向前导航,向后导航

在查找的时候的前一个后一个位置

以及在跳转行数的前一个后一个

不包括 hjkl的移动位置

【ctrl+o】回到较旧的位置

【ctrl+i】去到较新的位置

2)

【%】匹配括号查找

查找对应的另一边的括号

把光标放到( [ { 或者 } ] ),然后按%,就跳转到匹配的括号。
  

3) 搜索移动

1)

正常模式下,输入/或者?,在屏幕下方输入单词进行查找

/ or  ? 。一个正向一个逆向

或者

光标停在要给单词上,按【*】,就相当于输入了/单词

 n or N , 下一个或者前一个
一些附加的设置

【:set hls】设置高亮的查找  highlightsearch

【:set nohls】  设置非高亮

【:set ic】设置忽略大小写 ignore case

【:set noic】设置不忽略大小写

【:set is】设置逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成 includesearch

【:set nois】设置完整搜索模式

/words/c】  仅一次中忽略大小写

2)

f,F,t,T在当前行查找字符,如果没有找到,就什么也不做。

如果要多次查找同个字符,结合【,;】重复命令

f{char}:在当前行正向查找指定字符

F{char}:反向查找

t{char}: 正向移动到下一个char所在之处的前一个字符上。

T{char}:反向移动到上一个char所在之处的后一个字符上。

  

2.删除

【operator】:d删除

更多指令:【operator + 数字+ motion】

【x】

 

光标处删除一个字符

【d】

注意:光标处的字符也删除

dl 相当于 x

dw 从光标开始删除到下一个单词开头(w是 exclusive)
de 从光标开始删除到这一个单词词尾(e是inclusive)
d$ 从光标开始删除到这一行结尾

dd 删除整行 

输入命令【p】把删除的那行粘贴在光标所在的行,在光标所在行的的下面插入此行

db 从光标前面开始删除到词头(:不包括光标所在的字符

ps:删除操作符d的更多组合

1)d与查找字符(t,T,f,F)的结合,比如

dfd ==》从当前光标处,删除到 字符d前的字符。

dt. ==》从当前光标处,删除到直到字符. 前的字符。

f,dt. ==》找到,光标从,开始,删除直到.前的字符。

 

2)d与文本对象的结合:daw dap (文本对象下面会介绍) 

可以用来构造可重复的修改:比如删除用daw(delete a word:operator+motion(motion可以用文本对象)),就可以用.来重复上一个操作,即删除单词。

 

3) dl 和 cl 的区别(operator c 和 operator d)

dl = x 删除当前字符

cl 删除当前字符并进入插入模式

 

 3.【:】输入符

在正常模式下,输入:会在屏幕下面显示:

就可以在最下方输入一些命令了

使用上下箭头前一个命令后一个命令 

按ESC退出

按TAB键补全命令

3.1 文件相关

:w保存   :q退出

【:wq】保存退出

【:q!】不保存退出

【:w FileName】保存到文件但不退出

:r 读取取回 可以是文件内容也可以是外部命令的输出

【:r FileName】读入文件的内容到光标下

【:r !ls】读取外部命令的输出 的内容 插入到光标下

:e 编辑 

:help 帮助-跳到对应的主题上

3.2 【:s】替换命令

【:s/old/new】 替换光标所在那一行的第一个匹配的
【:s/old/new/g】 替换光标所在那一行的所有匹配
【:#,#s/old/new/g】 替换两行之间的所有匹配。如560,590s/thee/the/g
【:%s/old/new/g】 替换整个文件的所有匹配
【:%s/old/new/gc】 询问是否替换,整个文件

3.3 【:!】外部命令

【:!ls】    

【:!pwd】    

【:!rm】 

等等

 

4.撤销

 

u 撤销单次。试下多次按 或者 【数字+u】

 U 撤销整行的修改。
 ctrl+r 撤销刚刚的撤销操作,如果刚刚没有撤销命令,那么这个指令就没有用。

注意:

1)当进入一次插入模式,再退出插入模式,这整个被视为一个撤销单元块,被视为一次修改。

2)为了把撤销单元切得更小块,可以用<esc>o(相当于退出插入再进入插入) 来代替 回车键。这样就是每行是一个撤销单元。

3)当在插入模式,使用上下左右的光标键 其实就是产生了一个撤销块,即相当于退出了后又进入插入模式。

 

5.替换

r & R替换命令

r 单次替换,自动退出为正常模式

 

R 一直替换,会进入替换模式(可以看到屏幕最下方出现了--REPLACE--)

相当于我们键盘上的Insert按键

按esc退出为正常模式

 

6.重复命令【. ; ,】

1)【. 】

重复上一次的修改

比如上一次的操作是比较复杂的daw,删除一个单词。还想继续删除一个单词的操作,就按.就行了。

比如上一次的修改是 x,dd,  按.就是删除当前字符、删除当前行。

比如上一次的修改是在插入模式中的修改——每行末尾加分号【A;ESC】,继续下一行【j.】

 

2)和查找字符命令(fFtT)结合的

【;】

重复查找上次所查找的字符

【,】

反向查找

 

ps:查找words命令(/),用n和N进行上一个查找

【;】和【.】合作例子:先找到一个字符(f 移动光标),进行插入修改操作退出(进入插入模式到退出被视为一次修改) ,然后重复上述过程就直接用【;.】即可——让移动动作 和  修改动作 都可以重复。

 

如果用【/】搜索单词的操作的话,用【n/N】来重复移动动作。

【.范式】:

1.

用一次按键移动,一次按键执行

比如上述例子中的【j.】【;.】【n.】

2.

尽量构造可以重复的操作

删除一个单词用 daw  而不是其他db dw de之类的

能用.来重复的时候,就不需要数次数了 比如【dw.】= 【d2w】

 

 

7.复制粘贴

复制y

yw,复制一个单词

yy,拷贝当前行;相当于 Y 

nyy,拷贝当前后开始的n行

y^,复制到行首,不包括当前位置;

y$,复制到行尾,包括当前位置;

yG,复制到文档尾;ygg,复制到文档头;

【yyp】复制粘贴

p:在光标后进行粘贴

(P:在当前光标前粘贴)

dd删除后,可以用p进行粘贴——ddp即实现了当前行与下一行的交换;

x删除后,也可以用p进行粘贴——xp即实现了当前字符与其后的一个字符的交换;

d相关的命令删除后都可以用p进行粘贴

 

 

8.缩进

缩进类命令

1)单行缩进

<<

>>

 

2)多行缩进

n<<

n>>

当前行开始的n行进行缩进

 

2)从当前行缩进到末尾

>G

 


2.插入模式 INSERT

1.【iao直接进入插入模式】i 在光标的前面进入插入模式
 I 到行首进入插入模式
 

a 在光标的后面进入插入模式

 

A 到行尾进入插入模式

相当于【$a】,能用1个的就不要用2个了。

 

o 在光标的下方打开新的一行并进入插入模式

相当于【A+回车】

 

O在光标的上方打开新的一行并进入插入模式

相当于【ko】

2.【c删除文本(text)以后再进入插入模式】

更多指令:【c + 数字+ motion】

ps:operator c 和 operator d都是删除,区别是进不进入INSERT模式

ce 删除光标到词尾 并且进入插入模式。试下 c2e 
 cw 删除光标到下一个单词的开头 并且进入插入模式。试下c3w
 c$ 删除光标到行尾 并且进入插入模式。试下c4$

2.【s删除字符(character)以后再进入插入模式】

s = cl
 

 
  

3.可视模式 Visual

在正常模式下按【v】,屏幕最下方会显示 --Visual字样

 
按v进入面向字符的可视模式先:使用移动操作的一些motion(h j k l w b e 啊这些),就会看见高亮选中一段字符
 

再:可以进行相当于在正常模式下的命令操作

比如 【d】就是删除了选中的字符

比如 【:w FileName】 就是存到FileName中

比如 【y】就是复制了选中的字符,然后再【p】就是复制了

比如 【r-】就把选中的所有字符全部替换成了-

 

按完操作以后就自动退出到正常模式了。

按V进入面向行的可视模式VG:选中光标所在行到最后一行
  
ctrl-v进入面向块的可视模式 

4.vim内部的文本对象 textobject

1.用于操作分隔符的文本对象

分隔符有:

<>(xml的tag) <>

()    []  {}  <> 

""   ''    ``   

分隔符就是相当于配对的符号,用他们来作为开始和结束的标志

用于操作分隔符的文本对象

 

it一对XML标签的内部<xml>tags</xml>
at一对XML标签
 

i代表inside,里面

a代表around,围着的

同理 a) i),a] i],a} i},a> i> 
同理a'' i'',a' i', a` i` 

 

2.用于操作文本块的文本对象

 

d{motion}命令 和 aw as ap配合起来使用比较好,

c{motion}命令 和 iw 以类似的文本对象配合使用较好。

aw

当前单词以及后面的空格,如果有有的话

iw仅仅删除当前单词,不后面的包括空格
is as句子
ip ap段落

 

3.用文本对象执行命令:d,c,y operator

{motion} 中的都可以用 文本对象 来代替

c + {motion}删除再进入插入模式

ci''#<esc>——修改双引号里面的内容为#

citclick here<esc>——修改标签里面的内容为click here

d + {motion}删除

daw 删除一个单词

y + {motion}复制yit拷贝标签内的文件

 5.vimrc设置

vimrc 在哪里

输入 :version 最后面几行会出现

如不知道 $VIM 代表什么 

输入:echo $VIM

这篇关于Vim使用基础篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090362

相关文章

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

如何免费的去使用connectedpapers?

免费使用connectedpapers 1. 打开谷歌浏览器2. 按住ctrl+shift+N,进入无痕模式3. 不需要登录(也就是访客模式)4. 两次用完,关闭无痕模式(继续重复步骤 2 - 4) 1. 打开谷歌浏览器 2. 按住ctrl+shift+N,进入无痕模式 输入网址:https://www.connectedpapers.com/ 3. 不需要登录(也就是

ps基础入门

1.基础      1.1新建文件      1.2创建指定形状      1.4移动工具          1.41移动画布中的任意元素          1.42移动画布          1.43修改画布大小          1.44修改图像大小      1.5框选工具      1.6矩形工具      1.7图层          1.71图层颜色修改          1

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

C#中,decimal类型使用

在Microsoft SQL Server中numeric类型,在C#中使用的时候,需要用decimal类型与其对应,不能使用int等类型。 SQL:numeric C#:decimal

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

flask 中使用 装饰器

因为要完成毕业设计,我用到fountain code做数据恢复。 于是在github上下载了fountain code的python原代码。 github上的作者用flask做了fountain code的demo。 flask是面向python的一个网站框架。 里面有用到装饰器。 今天笔试的时候,我也被问到了python的装饰器。