10分钟vim快速入门

Wesley13
• 阅读 645

 一、vim的安装和插件

    vim的在linux和mac机器上都是默认的文本编辑器,没有特殊需求的话,默认设置就可以直接使用,window上也可以安装,网上安装教程过于繁琐,我们简单点就好,window安装如下:

  • 我们先安装chocolatey,这个类似windows上package manger(如yum,rpm),通过命令安装软件包,简单方便。

  • 用管理员权限打开你的cmd,运行:

    @powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
    

    记得要用管理器权限运行。

  • 用管理员权限运行PowerShell.exe ,运行如下指令:

  •   iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    

    若是系统禁止运行脚本,如此解决:点我

  • 管理员权限打开cmd,运行如下命令,安装spf13-vim:

    choco install spf13-vim
    

    如此,vim安装成功

二、模式

  • 普通(normal)模式

            一般用vim默认打开文本的默认模式,此模式下,只能对文本进行【上下左右,文头文尾】游标操作,以及【粘贴复制删除】,不可以编辑文本。

  • 编辑(insert)模式

        在普通模式下,按下【i, I, o, O, a, A, r, R】任何一个字母后(常用i(insert)即可,其他慢慢掌握)就会进入编辑模式,此时可以对文本进行编辑 ,和一般的文本编辑器操作没有任何区别。一般画面左下方会出现【INSERT 或REPLACE 】字样。

  • 命令(command)模式

        在普通模式下,输入【 : / ? 】任何一份字符,就切切换到命令模式下,命令模式下,可以对文本做一些除编辑以外操作,比如存档,读取,正则搜索,替换,排重,调用perl或者系统指令,在你面前除了操作文本还可以和系统交互,就是如此人性化。

  • 三种模式的转换

        三种模式的切换,都是以普通模式为中心来切换的,想要切换其中任务一种模式,都需要按下ESC,回到普通模式,然后再切换到指定模式。如下图

     10分钟vim快速入门

三、基础功能

   安装好之后,对模式有个大概的了解,你肯定会想输入一些内容到文本。基础功能就是让你如用记事本般使用vim。一般的编辑器都有如下功能,光标移动,插入,删除,粘贴,复制,保存,打开,退出,新建文本。我们通过一个例子来熟悉这些:

1.光标移动

  •   vi→ 打开vim编辑器(window下直接打开vim窗口,无需输入这个指令),此时是普通模式
      i→ 编辑模式
      输入"hello vim!"→ 此时在编辑文本内容
      按键ESC,返回普通模式
      :w test.txt→ 【:】进入命令模式,w表示存档为文件名test.txt的文本
      按键ESC,返回普通模式
      yy→复制当前行
      p→粘贴当前行
      :wq→ 命令模式下,保存并退出当前文件
    
  • 10分钟vim快速入门

2.增删改查

  • 通过以上几个简单的指令,你已经掌握了模式切换,输入文本,粘贴复制,光标移动这些基础功能,其他的你需要知道这些命令:
  1.  hjkl→上下左右的光标移动(普通模式)
     d→删除当前光标处字符(普通模式)
     dd→删除当前行(普通模式)
     :e file →打开一个文件(命令模式)
     :w → 存档(命令模式)
     :saveas file  → 另存为(命令模式)
     :q! →退出不保存(命令模式)
     :bn和:bp →切换上一个或者下一个文件(命令模式)
     u → 回撤上一步
     ctrl-r → 恢复上一步
    
  • 至此vim的简单用法已经介绍完毕,若是只是想能在linux上打开个文本可以看和编辑,以上功能已经足够了,后面的介绍是让你了解vim更强大的功能,提升你的效率,有这个需求了可以往下看。

四、中级功能

 中级功能我们主要介绍如何让你的光标移动更有效率,以及如何使用正则匹配搜索和替换。

1.快速插入

  •   i, I→i 为动当前光标处插入,I为目前列的第一个非空白字符出开始插入
      a, A→a 从目前光标喜爱一个字符开始插入,A为从目前光标最后一个字符插入
      o, O→o 从目前光标下一列出插入一行,O从目前光标处上一列插入一行
      r, R→r取代光标所在那一个字符,R一致渠道光标所在的字符,直到按下ESC
    

2.行快速移动

  •   gg → 光标移动到第一列
        
      G→光标移动到最后一列
      
      nG→n为数字,移动到第n列
    

   

3.当前行快速移动光标

  •   0 → 到行头
      ^ → 到本行的第一个非blank字符
      $ → 到行尾
      g_ → 到本行最后一个不是blank字符的位置。
      fa → 到下一个为a的字符处,你也可以fs到下一个为s的字符。
      t, → 到逗号前的第一个字符。逗号可以变成其它字符。
      3fb → 在当前行查找第三个出现的b。
      F 和 T → 和 f 和 t 一样,只不过是相反方向。
      %  → 匹配括号移动,包括 (, {, [. 
      * 和 # → 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
      w → 到下一个单词的开头
      e → 到下一个单词的结尾。
    

4.复制选择内容

  • v→ 可视化的选择(普通模式下),我们通过一个小例子说明

  •   v→可视化的选择
      移动光标
      y→复制
      p→粘贴刚才选择的字符
    
  • 10分钟vim快速入门

5.搜索

  •   /word  → 向当前光标之下找名称为word的的字符,向下搜索
      ?word  → 向当前光标之上找名称为word的的字符,向上搜索
      输入上面指令之后按键enter键然后输入一下键盘
      n → 代表重复前一个搜索动作(上次是/,n重复向下搜索,一直按n,会一直重复)
      N → 代表反向前一个搜索动作(上次是/,N代表向上搜索,一致按N,会一直重复向上)
      /uid\d\{10} → 正则匹配,匹配uid开头后面10个数组的字符串
    
  • 关于正则匹配部分,不再细讲了,具体可以点击:此处

6.替换

  •   替换是命令模式下
      :%s/name/fullname/g  → 表示在所有行中搜索替换name为fullName
      表达式: :[range]s/from/to/[flags]
        
      flags 有如下四个选项:
      c confirm,每次替换前询问;
      e error, 不显示错误;
      g globle,不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串;
      i ignore,忽略大小写。
    
  • 关于正则匹配部分,不再细讲了,具体可以点击:此处

五、高级功能

拥有以上命令,你就可以舒舒服服使用vim,不过vim更强的地方是,他还有一些如瑞士军刀般的功能,简单,高效,强大到你爱不释手。

1.区块操作[Ctrl]+v

  •  前面我们知道v是选择视图,[Ctrl]+v类似把视图分解成列,一次可以选择一列。拿这个可以做什么,比    如我们想在所有行之前插入一个字符,我们可以这么做:

  •   vim:test.txt → 打开test.txt
      yy → 复制一行
      p →粘贴一行
      10. →重复上一个指令10次,"."代表重复上一个指令
      ctrl-v → 区块选择
      G → 到最后一行
      I→行头插入字符
      head →输入字符head(这个是输入字符,不是指令)
      ESC → 按键esc,你会看到所有的行头输入了head
    

    10分钟vim快速入门

     

  • 或者我们想在所有的行尾插入一个字符,我们可以这么做:

  •   vim:test.txt → 打开test.txt
      ctrl-v → 区块选择
      G → 到最后一行
      $ → 光标移到行末尾
      A→行尾插入字符
      end →输入字符end(这个是输入字符,不是指令)
      ESC → 按键esc,你会看到所有的行头输入了end
    
  • 10分钟vim快速入门

          

2.排重

  • 有时候文本里面有重复字符或者重复数字,我们有排重的需求,我们用如下指令

  •   :g/^\(.*\)$\n\1$/d                      //去除重复行
      :g/\%(^\1$\n\)\@<=\(.*\)$/d     //功能同上,也是去除重复行
      :g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d  //功能同上,也是去除重复行  
    
  • 10分钟vim快速入门

3.调用shell

  •   :! command → 执行系统命令
      :! ls → 查看当前目录
      :! ls |sort → 查看当前目录并排序
    

4.宏录制

  • 宏录制,可以理解为录制一批命令列表,然后再调用宏,会调用这刚录制的命令集。有时候需要处理服务器日志,需要筛选一些特殊信息(需要多个命令来处理),而每一行的长度不一样,格式一样,我们就可以录制一个宏,然后批量执行来完成筛选。比如我们想把刚才的test.txt文件里面所有行的hello移动到行首,我们可以这么做:

  •   vim test.txt
      q → 开始宏录制
      a → 命名宏名称为a
      gg → 光标移至第一行
      /hello → 搜索hello
      enter → 光标移至h位置
      v → 开启视图选择,并移动光标至o,选中hello
      d → 剪切单词hello
      $ → 移动光标到行末尾
      p → 复制单词hello
      j → 光标移动至下一行
      0 → 移动光标到行首
      q → 宏a录制完毕
      10@a → 执行宏a 10次
         
    
  • 10分钟vim快速入门

5.调用awk

  •   :!awk -F"\!" 'print $2' test.txt  把文件test.txt 通过该"!"进行字符分割,并输出第二列
    
  • 10分钟vim快速入门

6.匹配删除

#删除含有“#”开头的行
g/^#/d 
#删除空行
g/^$/d 
#删除不含指定字符串的行
g!/pattern/d 

    vim还有一些更高级的功能,这里就不在一一细说了,感兴趣可以移步网上找些教程,或者看帮助文档。vim也可以通过插件打造成IDE,比如这个C++的IDE ,,还有vim的速查卡 ,vim常用tips

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这