VIM

vim主要分为3个模式:

  1. Normal 模式
  2. Insert模式
  3. 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 + z

  • U大写表示撤回当前行的所有命令,让该行回到原始状态

  • 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 保存和退出

退出:

  • :q quit 退出,但是如果有修改过文件,则无法退出,必须先保存
  • :q!强制退出,无论是否修改。
  • :x退出
  • ZZ直接退出,是Normal模式的命令,但是放在此处一起归为退出命令了。

保存:

  • :w write 保存
  • :w {fileName}另存为新文件并命名为{fileName}
  • :wq 保存并退出

另存为命令:w {fileName}还可以和可视化选择命令搭配。比如在进行可视化选择后,输入另存为命令,可以看到左下方命令栏中出现:'<,'>w {fileName},只会将选中的内容另存到指定的新文件中

读取:

  • :r {fileName} read 可以读取一个指定的文件到光标处
  • :r !{command} 可以读取一个外部命令的执行结果到光标处

设置:

  • :set nu 常用命令,显示行号

  • :set ruler在右下角显示当前行列和进度

  • :set hls 查找匹配项高亮

  • :set ic / :set noic ignore case 查找忽略大小写 开启/关闭

如果想要在一次查询中忽略大小写,可以用/{word}\c的命令形式。注意\c并非/c

2.3 补全功能

在输入命令行命令时,用Ctrl-D可以列出当前匹配的命令。按Tab键可以补全命令。对于命令中的文件名参数也可以用Tab补全

3. Insert 模式

VIM学习笔记-1的更多相关文章

  1. vim 学习笔记系列(前言)

    今天上午的时候,看到大神在用vim编程,画面直观,速度很快,操作只需要用命令符就可以实施. 所以可以推断vim的命令符是复杂的,那么学习过程中记忆会很漫长,很痛苦,但是如果记住了这些命令符,并可以熟练 ...

  2. vim学习笔记(一)—— vim安装方法

    一.完全卸载vim的方法 sudo apt-get remove --purge vim (--purge 是完全删除,会连配置文件一起删除) 二.Vim前言——————“世界上只有三种编辑器,EMA ...

  3. VIM学习笔记

    参考: http://linux.chinaunix.net/techdoc/beginner/2009/12/20/1150108.shtml VIM命令大全 光标控制命令 命令           ...

  4. vim 学习笔记

    vim介绍:一款编辑器,另外一般linux系统会自带,所以一般linux下日志.配置文件等 纯文本文件的修改编辑等通过vim操作 学会的好处:1 方便操作linux下日志.配置文件等纯文本文件 2 功 ...

  5. [Vim]vim学习笔记--多个文件打开,切换,关闭

    一种情况是在shell中用vim打开多个文件,另一种是在vim编辑器中打开多个文件 同时打开多个文件 vim file1 file2  打开文件并水平窗口显示 vim -o file1 file2 打 ...

  6. vim学习笔记(12):在vim中修改文件编码,解决vim 打开乱码

    在linux 中查看文件编码可以通过以下几种方式: 一.查看文件编码 1.查看文件编码file命令 :file ip.txt ip.txt: UTF-8 Unicode text, with esca ...

  7. vim学习笔记(11):vim 去掉<200b>

    vim查看文件,发现多了<200b>字符,使用/200b搜索匹配不上:grep 200b 也匹配不上 查询后才知道:200b是:Unicode Character 'ZERO WIDTH ...

  8. vim学习笔记(10):vim命令大全

    进入vim的命令: vim filename :打开或新建文件,并将光标置于第一行首 vim +n filename :打开文件,并将光标置于第n行首 vim + filename :打开文件,并将光 ...

  9. vim学习笔记(9):vim显示文件名

    如何让vim在编辑模式下显示文件名 在根目录下:~/.vimrc 中追加一行: set laststatus=2 shell 下执行命令: echo "set laststatus=2&qu ...

  10. vim学习笔记(2)——vim配置

    记录vim的配置,随时更新 MacVim 安装: homebrew,安装位置:/usr/local/Cellar brew linkapps macvim--将macvim.app加入到Applica ...

随机推荐

  1. GIL与普通互斥锁区别,死锁现象,信号量,event事件,进程池与线程池,协程

    GIL与普通互斥锁区别 GIL锁和互斥锁的异同点 相同: 都是为了解决解释器中多个线程资源竞争的问题 异: 1.互斥锁是Python代码层面的锁,解决Python程序中多线程共享资源的问题(线程数据共 ...

  2. linux中MySQL主从配置(Django实现主从读写分离)

    一 linux中MySQL主从配置原理(主从分离,主从同步) mysql主从配置的流程大体如图: 1)master会将变动记录到二进制日志里面: 2)master有一个I/O线程将二进制日志发送到sl ...

  3. 一次 HTTP 请求就需要一次 TCP 连接吗?

    一次 HTTP 请求就需要一次 TCP 连接吗? 本文写于 2021 年 2 月 9 日 太长不看版本:短连接需要,长连接不需要. 一次 HTTP 请求就需要一次 TCP 连接吗? TCP 的连接与断 ...

  4. Springcloud及Git线上配置详解

    SpringCloud 这个阶段该如何学? 三层架构 + MVC 框架: Spring IOC AOP SpringBoot,新一代的JavaEE开发标准,自动装配 模块化~ all in one,代 ...

  5. CSAPP 之 AttackLab 详解

    前言 本篇博客将会介绍 CSAPP 之 AttackLab 的攻击过程,利用缓冲区溢出错误进行代码注入攻击和 ROP 攻击.实验提供了以下几个文件,其中 ctarget 可执行文件用来进行代码注入攻击 ...

  6. Node.js躬行记(20)——KOA源码分析(下)

    在上一篇中,主要分析了package.json和application.js文件,本文会分析剩下的几个文件. 一.context.js 在context.js中,会处理错误,cookie,JSON格式 ...

  7. Java泛型类型擦除问题

    以前就了解过Java泛型的实现是不完整的,最近在做一些代码重构的时候遇到一些Java泛型类型擦除的问题,简单的来说,Java泛型中所指定的类型在编译时会将其去除,因此List 和 List 在编译成字 ...

  8. Web 后端的一生之敌:分页器

    分页器是 Web 开发中常见的功能,看似简单的却经常隐藏着各种奇怪的坑,堪称 WEB 后端开发的一生之敌. 常见问题 边翻页边写入导致内容重复 某位用户正在浏览我的博客,他看到第一页最后一篇文章是 & ...

  9. AOSP查看当前要打进系统里的都有哪些包

    发现问题: 修改系统时常常需要预置APK,这就要修改PRODUCT_PACKAGES这个变量,那么如何查看这个数组的值呢?我们可能直接在mk文件中去打印它,后来发现打印它只会显示继承关系(即继承自了哪 ...

  10. 拥有webkit内核浏览器的平台

    1-拥有webkit内核的浏览器: IOS safari Android 的浏览器 Google chrome 猎豹浏览器 百度浏览器 Opera 以上可知手机的浏览器均为webkit内核 2-拥有其 ...