专栏首页北京马哥教育【基础拾遗】编辑器之神-VIM

【基础拾遗】编辑器之神-VIM

在这天地间,流传这两大神器的故事:据说Emacs是神的编辑器,而Vim是编辑器之神。正所谓,工欲善其事,必先利其器。今天就和大家分享一下关于编辑器之神Vim的传说。

一、Vim的历史

1.下图是关于几款主流编辑器的学习曲线:(注:图片来自互联网)

2.VIM - Vi IMproved

3.上图中vi即是vim的前身

  • VI:Visual Interface

4.VIM和VI是文本编辑器

  • 何为文本文件?
    • 文本文件一般指只有字符原生编码构成的二进制计算机文件,与富文本相比,其不包含字样样式的控制元素,能够被最简单的文本编辑器直接读取
  • 文本文件常见的格式?
    • ASCII、MIME、.txt、…
  • 那么,何为文本编辑器?
    • 文本编辑器是计算机软件中的一种。主要用于用来编写和查看文本文件。
  • 文本编辑器的种类:
    • 行编辑器:sed
    • 全屏编辑器:nano、vi、vim

二、Vim编辑器的基本操作

1. 基本操作

  1. VIM:模式化的编辑器
  2. 基本模式
    • 编辑模式 (命令模式)
    • 输入模式 (插入模式)
    • 末行模式 (vim内置的命令行接口)
    • Note:打开的时候默认的模式是编辑模式
  3. 打开文件
    • # vim [OPTION]... FILE...
    • +#:打开文件后,直接让光标处于第#行的行首
    • +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;
  4. 模式转换
  • 模式转换:
    • 编辑模式 - - > 输入模式
      • iinsert,在光标所在处前面插入;
      • aappend,在光标所在处的后面插入;
      • oopen,在当前光标所在行的下一行打开新行,并转换为输入模式;
      • I:在当前光标所在行的行首输入;
      • A:在当前光标所在行的行尾输入;
      • O:在光标所在行的上一行打开一个新行,并转换为输入模式;
    • 输入模式 - - > 编辑模式
      • ESC
    • 编辑模式 - - > 末行模式
    • 末行模式 - - > 编辑模式
      • ESC
    • 关闭文件
      • :q:退出
      • :!:强制退出,丢弃做出的修改;
      • :wq:保存退出;
      • :x:保存退出;
      • :w /PATH/TO/SOMEWHERE:当前编辑的文本保存到别的文件;
      • ZZ:保存退出;
  • 图示说明如下: (转载请注明出处)

2. 光标跳转:

  1. 字符间跳转:
    • h,j,k,l
      • h
      • l
      • k
      • j
    • #COMMAND:跳转由#指定的个数的字符;
  2. 单词间跳转:
    • w:跳转至下一个单词或后一个单词的词首
    • e:跳转至当前或下一个单词的词尾
    • b:跳转至当前或下一个单词的词首
    • #COMMAND:由#指定一次跳转的单词数;
  3. 行首行尾跳转:
    • ^:跳转至行首的第一个非空白字符;
    • 0:跳转至绝对的行首
    • $:跳转至绝对行尾
  4. 行间移动:
    • #G:跳转至由#指定行;
    • G:跳转至最后一行;
    • 1Ggg:跳转至第一行;
  5. 句间移动:
    • ):跳转至下一个句子;
    • (:跳转至上一个句子;
  6. 段落间移动:
    • }:跳转至下一段
    • {:跳转至上一段

3. vim的编辑命令:

  1. 字符编辑:
    • x:删除光标处的单个字符;
    • #x:删除光标处起始的#个字符;
    • xp:交换光标所在处的字符及其后面字符的位置;
  2. 替换命令:
    • rreplace
    • r:替换光标所在处的字符;(单字符替换)
  3. 删除命令:
    • d:删除命令,可结合光标跳转字符,实现范围删除;
      • d$:删除至绝对行尾
      • d^:删除至行首的第一个非空白字符
      • d0:删除至绝对行首
    • dd:删除光标所在行;
      • #dd:向下删除#行;
  4. 粘贴命令:
    • p,put,paste)
    • p:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的方;否则,则粘贴至当前光标所在处的面;
    • P:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的方;否则,则粘贴至当前光标所在处的面;
  5. 复制命令:
    • yyank
    • y:复制,工作行行为相似于d命令;
      • y$:复制至绝对行尾
      • y0:复制至绝对行首
      • y^:复制至行首的第一个非空白字符
      • yy:复制整行
        • #yy:复制多行;
  6. 改变命令:
    • cchange
    • c:修改
      • 编辑模式 - -> 输入模式
    • cc:删除并输入新内容
    • #cc:一次删除#行

三、其它编辑操作

1.可视化模式

  • v:按字符选定
  • V:按行选定
  • Note:经常结合编辑命令;

2. 撤销此前的编辑:

  • u(undo):撤销此前的操作;
    • #u:撤销指定次数的操作;
  • 撤销此前的撤销:
    • Ctrl+r
  • 重复前一个编辑操作:
    • .

四、翻屏操作

  • Ctrl+f:向文件尾部翻一屏;
  • Ctrl+b:向文件首部翻一屏;
  • Ctrl+d:向文件尾部翻半屏;
  • Ctrl+u:向文件首部翻半屏;
  • vim自带的练习教程
    • vimtutor

五、vim的末行模式

  • 内建的命令行接口
  • 特性
  • (1). 地址定界
    • :start_pos,end_pos
    • #:具体的第#行,例如:2表示第2行;
    • #,#:从左侧#表示起始,到右侧#表示结束;
    • #,+#:从左侧#表示的行开始,加上右侧#表示的行数;
    • .当前行;
    • $:最后一行;
    • %:全文;相当于(1,$)
    • /pat1/,/pat2/:表示从第一次被pat1匹配到的行开始,一直到pat2匹配到的行结束
    • 使用方式
      • 后跟一个编辑命令:
        • d:删除指定范围的内容
        • y:复制指定范围的内容
        • w /PATH/TO/SOMEWHERE:将范围内的行另存至指定文件中;
        • r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有内容;
  • (2). 查找
    • /PATTERN:从当前光标所在处向文件尾部查找
    • ?PATTERN:从当前光标所在处向文件首部查找
      • n:与命令同方向;
      • N:与命令反方向;
  • (3). 查找并替换
    • s:在末行模式下完成查找替换操作
      • s/要查找的内容/替换为的内容/修饰符
        • 要查找的内容:可使用模式;
        • 替换为的内容:不能使用模式,但可以使用\1, \2, …等后向引用符号;好可以使用"&"引用前面查找时查找到的整个内容;
        • 修饰符:
          • i:忽略大小写
          • g:全局替换;默认情况下,没一行只替换第一次出现的内容;
      • 查找替换中的分隔符/可替换为其它字符,例如:
        • s@@@
        • s###

    六、vim的文件模式

1. 多文件模式
  • vim FILE1 FILE2 FILE3 …
    • :next 切换至下一个文本
    • :prev 切换至前一个文本
    • :first 切换至前一个文本
    • :last 切换至最后一个文本
    • :wall 保存所有
    • :qall 退出所有
2. 窗口分隔模式
  • vim -o|-O FILE1 FILE2 …
    • -o:水平分割
    • -O:垂直分割
    • 在窗口间切换Ctrl+w,Arrow
3. 单文件窗口分割:
  • Ctrl+w,s:split,水平分割
  • Ctrl+w,v:vertical,垂直分割
4. 定制vim的工作特性:
  • 配置文件:(永久有效)
    • 全局/etc/vimrc
    • 个人~/.vimrc (默认不存在,需要自己创建)
  • 末行:(当前vim进程有效)
  • (1) 行号
    • 显示set number,简写为:set nu
    • 取消显示set nonumber,简写为:set nonu
  • (2) 括号匹配
    • 匹配set showmatch,简写为:set sm
    • 取消匹配set nosm
  • (3) 自动缩进
    • 开启set ai
    • 禁用set noai
  • (4) 高亮搜索
    • 开启set hlsearch
    • 禁用set nohlsearch
  • (5) 语法高亮
    • 开启syntax on
    • 禁用syntax off
  • (6) 忽略字符大小写
    • 启用set ic
    • 禁用set noic
5. 书籍推荐:《Vim-handbook-cn-72》
6. 获取帮助
  • 在末行模式下:help SUBJECT

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux),作者:向常乐

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-05-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • linux中的vi编辑器

    vim文字处理器 linux 下的vi 是一种文字编辑器,后来的升级版本是vim。vi 分为三种模式:一般模式、编辑模式、命令命令模式。它们之间的关系如下: ?...

    小小科
  • 史上最全VIM使用手册

    vim是一个向上兼容于vi的文本编辑器,可用于编辑各种纯文本。它对编辑程序特别有用。 基本模式: 编辑模式:默认编辑文件进入的模式 输入模式: 末行模式:内置的...

    小小科
  • 在 shell 中使用 vi 模式

    糖豆贴心提醒,本文阅读时间4分钟 作为一名大型开源社区的参与者,更确切地说,作为 Fedora 项目的成员,我有机会与许多人会面并讨论各种有趣的技术主...

    小小科
  • vim 超强编辑器

    用户4877748
  • linux文本编辑器-VIM基本使用方法

    +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首 vim + file 直接打开file,光标在最后一行

    yuezhimi
  • 算法工程师的效率神器——vim篇

    用vim?疯了吧?sublime不香吗?pycharm不香吗?jupyter notebook不香吗?我这可是最新版的windows 100操作系统诶,你要劝我...

    zenRRan
  • LNMP+Tomcat+Keepalived+LVS 多端口负载均衡

    应用场景:Keepalived+LVS高可+负载均衡集群架构中rs同时跑httpd(80端口)和Java(8080端口)服务,使用Keepalived负载均衡多...

    阿dai学长
  • 合并链表与生成括号——LeetCode 21、22 题记

    今天刷的是一道关于链表操作的简单题目,一道关于括号的中等难度题目。可见链表、括号类题目还是频繁出现的,可以有针对性地练习下。

    TTTEED
  • 玩一玩Google涂鸦中的《吃豆人》

    2010年5月为纪念街机游戏《吃豆人》诞生30周年,Google和南梦宫合作创作了第一个交互式涂鸦, Google上线这款涂鸦后, 广受好评, 涂鸦在Googl...

    zhaoolee
  • 使括号有效的最少添加

    给定一个由(和)括号组成的字符串S,我们需要添加最少的括号(或是),可以在任何位置,以使得到的括号字符串有效。 从形式上讲,只有满足下面几点之一,括号字符串才...

    WindrunnerMax

扫码关注云+社区

领取腾讯云代金券