VIM学习笔记-1
VIM
vim主要分为3个模式:
- Normal 模式
- Insert模式
- command模式
Insert 模式就是普通的编辑模式,没有太多可以介绍的,vim的主要功能都在 Normal 模式和 Command 模式中。
1. Normal 模式
在normal模式下,所有的按键都是功能键。
1.1 切换模式
进行Insert模式可以通过按下输入键
i- (insert) 在光标前插入a- (append) 在光标后插入A在行尾插入o- () 在当前行后插入新行O- () 在当前行前插入新行cw/ce- () 替换从光标处到最后一个单词结尾的所有字符
1.2 移动
最基本的移动按键为hjkl 分别用于左,下,右,上方向的移动
- 使用如
100j这种格式的命令可以直接向对应方向移动指定的次数
1.2.1 行内移动
0到行头$到行尾^到本行第一个非空白字符g_到本行最后一个非空白字符
1.2.2 行间移动
{n}G到第n行gg到第一行G到最后一行
1.2.3 单词移动
一般我们规定一个单词由字母,数字和下划线组成。
如果是按默认的单词规则移动,使用小写。如果想要按空白字符来区分单词,则使用大写的E,W
w移动到下一个单词的开头e移动到下一个单词的结尾

1.2.4 查找匹配移动方式
%当前光标如果在括号上,则移动到其匹配的另一个括号上,对{},[],()都适用*和#用于匹配当前光标所在的单词,高亮显示所有匹配项,并且可通过*移动到下一个单词,通过#移动到上一个单词/{phrase}可以在当前光标之后内容中查找{phase}指定的单词,并跳转到单词的开头,
通过?{phrase}来从当前光标向前查找
可以通过按n重复查找当前位置下一个,N查找当前位置上一个
1.3 编辑操作
1.3.1 简单文本操作
使用d,c,y操作的数据都会进入寄存器,都可以使用p进行粘贴操作
p/P粘贴操作,p在当前位置之后进行粘贴,大写P表示在当前位置之前yy复制当前行,效果等价于ddP
d:
dd删除当前行,并且把行数据放入剪切板中D等于d$,删除光标所在处到行尾u撤回。注意在vim中撤回不是ctrl + zU大写表示撤回当前行的所有命令,让该行回到原始状态ctrl + r重做,和撤回相反的操作r{x}用字符x来替换当前光标所在的字符R进入替换模式,可以输入字符不停地替换后续的所有内容gU/gu变大写/变小写
c:
c的作用基本和d相似,只是在执行命令后会自动进入 Insert 模式
1.3.2 组合操作
许多编辑命令都可以和移动光标的命令组合在一起:<operator> <motion>,像是d,c,y
如 :
d$将删除光标到行尾的字符dte将删除光标到当前行的第2个e之前的字符ye将复制从光标到词尾的字符
当然我们也可以在编辑命令之前加上移动命令,来进行光标的定位,如:
0d$会删除本行ggyG复制整个文本
但是请注意,编辑命令只是和后面跟着的移动命令结合,当你输入一个编辑命令d时,可以在右下角的命令栏中看到一个字母d,这表示vim正在等待你的后续输入。而前续的移动命令并不是必需的,只是为了对想要操作的内容的起点进行定位。
同时,移动命令也可以和数字相结合,所以可以使用<operator> {number} <motion>格式的操作
如:
d2w删除光标开始的后面2个单词d2$删除光标到后面2行
1.3.3 高级操作
替换命令:
:s/old/new替换当前行,把old改成new
:{n},{n}s/old/new/g 在s前可以加上指定行,或指定范围。并且可以通过/g指定替换每行的所有符合项,否则每行只会替换第一个符合项
:%s/old/new/gc使用%表示在全文件中进行查找替换,并且/c表示在替换时会弹出确认提示
.小数点可以重复上一次命令{n} <command>可以重复某个命令n次
100idesu [ESC]这个命令会向文件中写入100 个desu单词
Ctlr-N
1.4 其他操作
Ctrl-g可以在命令栏显示当前文件的基本信息,编辑状态,以及当前光标所在行列。
2. Command模式
命令模式,就是在vim最下面那行输入栏,在这里可以输入许多命令。一般都以:开头
2.1 执行外部命令
通过:! {command}来执行外部命令
如:
:! ls会列出当前目录下的文件
2.2 保存和退出
退出:
:qquit 退出,但是如果有修改过文件,则无法退出,必须先保存:q!强制退出,无论是否修改。:x退出ZZ直接退出,是Normal模式的命令,但是放在此处一起归为退出命令了。
保存:
:wwrite 保存:w {fileName}另存为新文件并命名为{fileName}:wq保存并退出
另存为命令:w {fileName}还可以和可视化选择命令搭配。比如在进行可视化选择后,输入另存为命令,可以看到左下方命令栏中出现:'<,'>w {fileName},只会将选中的内容另存到指定的新文件中
读取:
:r {fileName}read 可以读取一个指定的文件到光标处:r !{command}可以读取一个外部命令的执行结果到光标处
设置:
:set nu常用命令,显示行号:set ruler在右下角显示当前行列和进度:set hls查找匹配项高亮:set ic / :set noicignore case 查找忽略大小写 开启/关闭
如果想要在一次查询中忽略大小写,可以用/{word}\c的命令形式。注意\c并非/c
2.3 补全功能
在输入命令行命令时,用Ctrl-D可以列出当前匹配的命令。按Tab键可以补全命令。对于命令中的文件名参数也可以用Tab补全
3. Insert 模式
VIM学习笔记-1的更多相关文章
- vim 学习笔记系列(前言)
今天上午的时候,看到大神在用vim编程,画面直观,速度很快,操作只需要用命令符就可以实施. 所以可以推断vim的命令符是复杂的,那么学习过程中记忆会很漫长,很痛苦,但是如果记住了这些命令符,并可以熟练 ...
- vim学习笔记(一)—— vim安装方法
一.完全卸载vim的方法 sudo apt-get remove --purge vim (--purge 是完全删除,会连配置文件一起删除) 二.Vim前言——————“世界上只有三种编辑器,EMA ...
- VIM学习笔记
参考: http://linux.chinaunix.net/techdoc/beginner/2009/12/20/1150108.shtml VIM命令大全 光标控制命令 命令 ...
- vim 学习笔记
vim介绍:一款编辑器,另外一般linux系统会自带,所以一般linux下日志.配置文件等 纯文本文件的修改编辑等通过vim操作 学会的好处:1 方便操作linux下日志.配置文件等纯文本文件 2 功 ...
- [Vim]vim学习笔记--多个文件打开,切换,关闭
一种情况是在shell中用vim打开多个文件,另一种是在vim编辑器中打开多个文件 同时打开多个文件 vim file1 file2 打开文件并水平窗口显示 vim -o file1 file2 打 ...
- vim学习笔记(12):在vim中修改文件编码,解决vim 打开乱码
在linux 中查看文件编码可以通过以下几种方式: 一.查看文件编码 1.查看文件编码file命令 :file ip.txt ip.txt: UTF-8 Unicode text, with esca ...
- vim学习笔记(11):vim 去掉<200b>
vim查看文件,发现多了<200b>字符,使用/200b搜索匹配不上:grep 200b 也匹配不上 查询后才知道:200b是:Unicode Character 'ZERO WIDTH ...
- vim学习笔记(10):vim命令大全
进入vim的命令: vim filename :打开或新建文件,并将光标置于第一行首 vim +n filename :打开文件,并将光标置于第n行首 vim + filename :打开文件,并将光 ...
- vim学习笔记(9):vim显示文件名
如何让vim在编辑模式下显示文件名 在根目录下:~/.vimrc 中追加一行: set laststatus=2 shell 下执行命令: echo "set laststatus=2&qu ...
- vim学习笔记(2)——vim配置
记录vim的配置,随时更新 MacVim 安装: homebrew,安装位置:/usr/local/Cellar brew linkapps macvim--将macvim.app加入到Applica ...
随机推荐
- mysql内连接查询之自连接
连接查询: 当查询数据时,通过连接操作查询出存放在多个表中的不同数据,当两个或者多个表中存在相同意义的字段时, 便可以通过这些字段对不同的表进行连接查询. 自连接: 如果在一个连接查询中,涉及的两个表 ...
- ucore lab6 调度管理机制 学习笔记
这节虽叫调度管理机制,整篇下来主要就讲了几个调度算法.兴许是考虑到LAB5难,LAB6就仁慈了一把,难度大跳水.平常讲两节原理做一个实验,这次就上了一节原理.权当大战后的小憩吧. schedule函数 ...
- ceph日常运维管理
点击关注上方"开源Linux", 后台回复"读书",有我为您特别筛选书籍资料~ 相关阅读: ceph分布式存储简介 常见问题 nearfull osd(s) o ...
- 老生常谈系列之Aop--JDK动态代理的底层实现原理
老生常谈系列之Aop--JDK动态代理的底层实现原理 前言 在Aop系列里面有两篇文章,分别是老生常谈系列之Aop--Spring Aop原理浅析和老生常谈系列之Aop--Spring Aop源码解析 ...
- 震惊--Nginx的map指令还能这样用
map指令简单介绍 当然这里写的都是官方文档是已经写过的,我简单抄一下哈. map指令来自于 ngx_http_map_module 模块,提供的核心能力是 基于一个变量创建一个新变量,大概是这意思. ...
- springcloud + nacos实现共用基础服务(灰度版本)
背景: 当我们使用微服务时,若想在本地联调就需要启动多个服务,为了避免本地启动过多服务,现将注册中心等基础服务共用.当我们在服务A开发时,都是注册到同一个nacos,这样本地和开发环境的服务A就会同时 ...
- EF Core 配置模型
0 前言 本文的第一节,会概述配置模型的作用(对数据模型的补充描述). 第二节描述两种配置方式,即:数据注释(data annotations)和 Fluent API 方式. 第三节开始,主要是将常 ...
- Solon 1.8.0 发布,云原生微服务开发框架
相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...
- Canvas 线性图形(五):多边形
前言 CanvasRenderingContext2D 没有提供绘制多边形的函数,所以只能由我们自己来实现绘制多边形的函数.以六边形为基础,需要用到三角函数:sin 和 cos. 点 A 坐标 (一) ...
- MyBatis - SqlSessionFactory 与 SqlSession
SqlSessionFactory SqlSessionFactory是创建SqlSession的工厂,一般使用单例模式,不需要重复创建. SqlSession SqlSession是直接与数据库直接 ...