Vim从入门到放弃

1. 初试Vim

首先进入Vim时默认是Normal模式,进入编辑模式后才可以进行正常编辑。

  • 使用i(insert)进入编辑模式,开始输入文字
  • i表示(insert),a(append),o(open a line below)
  • 使用Esc又可以回到 normal模式。使用:wq保存退出

2. Vim的模式

为什么Vim进入之后不想其他编辑器一样直接增删改查?

大部分情况下你是在浏览而不是编辑,所以Vim默认是normal模式,使用Esc从插入回到普通模式,在普通模式下可以进行各种命令操作和移动。

2.1 Insert(插入)模式

插入模式下Vim可以直接编辑,和其他编辑器一样

  • 使用i(insert)a(append)o(open a line below)进入插入模式
  • 使用Esc退出插入模式到normal模式

2.2 Command(命令)模式

Normal模式下输入冒号之后执行命令,比如保存退出:wq

  • 顾名思义该模式下用来执行Vim命令,比如保存:w,退出:q。
  • 比如分屏:vs(vertical split) , :sp(split)。
  • 比如使用:%s/foo/bar/g全局替换。

2.3 Visual(可视)模式

  • 在Normal 模式下使用v进入visual模式来进行选词选句
  • 使用V选择整行
  • 使用ctrl+v进行方块单词选择

3.Vim基本编辑

3.1 快速修正与纠错(撤回)

  • 进入Vim之后首先使用a/i/o之一进入插入模式
  • 编辑模式下ctrl+h 删除上一个字符,ctrl+w删除上一个单词,ctrl+u删除当前行
  • 命令模式下,u撤回
  • 以上快捷键也可以在linux终端下使用

3.2 快速移动大法

众所周知,vim normal模式使用了反人类的hjkl来移动

  • 据说编辑器作者在编写vim的时候键盘还没流行上下左右按键
  • 左(h),j(下),k(上),右((1),移动也不会让手指脱离主键盘区
  • 逼着自己使用hjkl一段时间之后,你会体会到它非常有效率

图1

3.3 在单词之间飞舞

在单词之间移动是我们浏览操作中最常使用的命令

  • w/W移到下一个word/WORD开头。e/E下一个word/WORD尾
  • b/B回到上一个word/WORD开头,可以理解为backword
  • word 指的是以非空白符分割的单词,WORD以空白符分割的单词

3.4 行间搜索移动

同一行快速移动的方式其实是搜索一个字符并且移动到该字符

  • 使用f char可以移动到char字符上,t移动到char的前一个字符
  • 如果第一次没搜到,可以用分号;/逗号,继续搜该行下一个/上一个
  • 大写的F表示反过来搜前面的字符

3.5 Vim水平移动

如何快速移动到一行的行首或者行尾呢?

  • 0移动到行首第一个字符,移动到第一个非空白字符
  • $移动到行尾,g_移动到行尾非空白字符
  • 记住常用的0和$就可以满足日常需求了,0+w配合行首

3.6 Vim页面移动

  • gg/G移动到文件开头和结尾,你可以使用ctrl+o快速返回

  • H/M/L跳转到屏幕的开头(Head),中间(Middle)和结尾(Lower)

  • Ctrl+u ctrl+f.上下翻页.(upword/forward)。zz把屏幕置为中间

4. Vim编辑技巧

4.1 增删改查

4.1.1 增加字符就是进入插入模式

  1. 进入插入模式编辑文本
  2. 使用a/i/o进入插入模式

4.1.2 如何快速删除一个字符或者单词呢?

  • Vim在normal模式下使用x快速删除一个字符
  • 使用d(delete)配合文本对象快速删除一个单词dw(daround word),dd删除行,dt)删除直到括号,d$删到行尾,d0删到开头
  • d和x都可以搭配数字来执行多次,4x删4个字符

4.1.3 Vim快速修改

相比删除,更常用修改,一般是删除之后改成我们期望的文本

  • 常用有三个,r(replace),c(change),s(substitute)
  • normal模式下使用r可以替换一个字符。s替换并进入插入模式
  • 使用c配合文本对象,我们可以快速进行修改

4.1.4 Vim查询

  • 使用/或者?进行前向或者反向搜索
  • 使用n/N跳转到下一个或者上一个匹配
  • 使用*或者#进行当前单词的前向和后向匹配

4.2 Vim搜索替换

:range s /pattern/string/flags

如: :% s/self/this/g

  • range 表示范围比如:10,20表示10-20行,%表示全部
  • pattern是要替换的模式,string是替换后文本(string为空时则返回匹配数)

Flag:

  • g(global)表示全局范围内执行
  • c(confirm)表示确认,可以确认或者拒绝修改
  • n(number)报告匹配到的次数而不替换,可以用来查询匹配次数

支持正则,如精确匹配单词:

:% s/\<quack>/jiao/g

5. Vim多文件操作

  • Buffer是指打开的一个文件的内存缓冲区

  • 窗囗是Buffer可视化的分割区域

  • Tab 可以组织窗口为一个工作区

5.1 Buffer-什么是缓冲区?

Vim打开一个文件后会加载文件内容到缓冲区
之后的修改都是针对内存中的缓冲区,并不会直接保存到文件
直到我们执行:w(write)的时候才会把修改内容写入到文件里

5.2 如何在 buffer之间切换呢?

使用:ls会列举当前缓冲区,然后使用:bn跳转到第n个缓冲区
:bpre :bnext :bfirst :blast
或者用:b buffer_name加上tab补全来跳转

5.3 Window窗口

窗口是可视化的分割区域

  • 一个缓冲区可以分割成多个窗口,每个窗囗也可以打开不同缓冲区
  • <Ctrl+w>s水平分割,<Ctrl+w>v垂直分割。或者:sp 和:vs

图2

切换窗口命令

:e b.txt 打开不同的文件

图3

6. Vim文本操作

6.1 文本操作对象

之前我们已经使用过文本对象了,回忆下dw(删除一个单词)

格式 number command text object

  • number表示次数,command 是命令,d (elete),c (hange)并进入插入模式,y (yank)
  • text object 是要操作的文本对象,比如单词w,句子s,段落p,i表示内部inner

2dw 、 cw 、 vi"选择引号内

6.2 Vim复制粘贴与寄存器使用

  1. normal模式下复制粘贴分别使用y(yank)和p(put),剪贴d和p
  • 我们可以使用v(visual)命令选中所要复制的地方,然后使用p粘贴
  • 配合文本对象:比如使用yiw 复制一个单词,yy复制一行
  1. Insert模式下的复制粘贴

很多人会使用鼠标进行选中,然后使用ctrl+v或者cmd+v粘贴
这个和其他的文本编辑器差不多,但是粘贴代码要注意:

  • 在vimrc中设置了autoindent,导致粘贴Python 代码缩进错乱

  • 这个时候需要使用:set paste 和:set nopaste解决

Vim在普通模式下复制/剪切的内容去哪了?

  • Vim里操作的是寄存器而不是系统剪贴板,这和其他编辑不同
  • 默认我们使用d删除或者y复制的内容都放到了“无名寄存器”
  • 用x删除一个字符放到无名寄存器,然后p粘贴,可以调换俩字符

:set clipboard=unnamed 可以让你直接复制粘贴系统剪贴板内容

6.3 批量操作

如:给所有行加上双引号

  1. V G 全选

  2. :normal I" 在行首加入”

  3. :normal A" 在行尾加入”

6.4 常见的Vim补全

  • 使用ctrl+n和ctrl+p补全单词
  • 使用ctrl+x ctrl+f补全文件名
  • 使用ctrl+x ctrl+o补全代码,需要开启文件类型检查,安装插件

7. Vim更换配色主题

  • 使用:colorscheme显示当前的主题配色,默认是default
  • 用:colorscheme <ctrl+d>可以显示所有的配色
  • 有中意的配色后,用:colorscheme 配色名就可以修改配色

学习自https://www.imooc.com/learn/1129,感谢PegasusWang大佬!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值