Vim 1 基本使用

Vim 系列教程目录:php

前言

Vim, 上古时期的编辑器, 号称编辑器之神. 我相信搞软件开发的大都据说过, 并且大多数人其实都多多少少用过 Vim. 什么? 你没用过? git commit 了解一下, Git 写提交信息时默认的编辑器就是 Vim 啊.前端

提起 Vim, 不少人的第一印象是: 功能强大, 可是难学, 难用, 能用 Vim 的要么是大牛, 要么是在装B... 老实说, Vim 在服务端用的比较多, 由于默认状况下, Vim 是服务器上惟二的选择(还有一个叫 Emacs 的上古神器), 搞客户端/前端/游戏/人工智能大数据开发的, 通常不怎么用 Vim. 并且如今各类编辑器, IDE(集成开发环境) 层出不穷, 界面美观, 功能强大, 上手容易, 而 Vim 以界面简陋, 上手困难著称, 这么一对比, 选择 Vim 的人愈来愈少, 对其望而生畏, 也不难理解.git

可是, 我仍是想写一些关于 Vim 的文章, 一来是总结记录我这些年来使用 Vim 的心得; 二来, Vim 其实真的是个很优秀的编辑器, 它就像一个其貌不扬却却充满智慧的男人, 你越深刻了解, 越能发现其魅力, 直到你爱上他, 离不开他(咳咳, gay 里 gay 气的).shell

听上去我像是个忠实 Vim 粉, 随时都要引起编辑器圣战. 其实不是的. 我在大学期间就学习了 Vim, 到如今也有六七年了, 中间也曾换过 Notepad++, Sublime, VSCode 做为主力编辑器, 各类 IDE 也都用过(Eclipse, AndroidStuido, JetBrains 全家桶等等), 最终我选择了 VSCode/IDE + Vim 插件做为主要的开发工具, 而 Vim 自己, 是我平时写文档, 记笔记, 简单修改 log/配置文件的工具.vim

我向你推荐 Vim, 不是要你把它看成主力工具, 而是但愿你能经过学习了解它, 学习一种高效的编辑方式, 同时你也能发现一些神奇的, 有趣的功能, 你能够在你喜欢的工具中添加 Vim 插件, 提高你的编辑效率, 这才是重点. 另外, 这系列文章并不会教你把 Vim 打形成 IDE, 即便对于我来讲, Vim 仍是做为一个文本编辑器比较合适.服务器

Vim 下载和安装

官网下载地址: www.vim.org/download.ph…编辑器

Windows 版本请点击: ftp.nluug.nl/pub/vim/pc/…工具

注意, 下载的文件名是 "gVim81.exe", gVim 的意思是带图形界面(Graphic)的 Vim, 由于 Vim 默认是在命令行里用的, 没有图形界面, 实在是太不友好了, 因此官方出了个 gVim, 有图形界面, 相对友好一些.post

PS. 我如今的电脑是 Windows, 因此如下都会以 Windows 版本的 gVim 作演示.学习

下载以后双击下一步下一步安装就行了, 没啥须要注意的, 安装好会在桌面上生成三个图标: gVim, gVim Easy, 以及 gVim Read-only, 注意, 请点击 gVim 图标来打开 Vim, 或者你也能够在某个文件上右键, 选择"用 Vim 编辑".

打开 Vim 以后, 你会发现这玩意奇丑无比, 简直不像21世纪的产物. 不要急, 咱们先不要管界面, 先学习使用, 后面咱们会慢慢地把它变好看(因此男人也得学会打扮啊).

接下来, 咱们就能够学习使用 Vim 了. 我不建议你如今立刻就去看官方文档(否则我写这些文章还有啥意义, 大误...), 由于直接看文档很容易看懵. 既然你选择看我这系列文章, 那么就安心看完, 以后你必定有所收获, 而且已经掌握基本使用和进阶技巧, 再去看官方文档就会轻松不少.

Vim 的几种模式

Vim 和普通的编辑器有一点很是大的区别, 或者是是本质的区别: Vim 是有不一样的模式(状态)的. 普通的编辑器, 你一打开就能够进行输入(打字)了, 很符合直觉, 打开就会用, 就好像使用 Word 同样. 可是 Vim 和他们不同, 你打开 Vim 以后, 是处于一种没法编辑的状态中的, 这是 Vim 的普通模式, 在这种状态下, 你是没法输入文字的, 只能执行一些指令.

在普通模式(默认模式)下, 你可使用 h,j,k,l 这几个按键来移动光标, 这四个键分别表明 左,下,上,右. 若是想输入文字, 你须要按下键盘上的 i 键, 才能进入可编辑的状态, 即 Vim 的插入模式, 才能像使用普通编辑器同样打字.

能够说, 正是因为 Vim 有不一样的模式, 才使得 Vim 的编辑效率远超其余编辑器. 模式是 Vim 的基础, 这里有必要先介绍一下 Vim 的几种模式.

Vim 有五种模式:

  • 普通模式/默认模式: 执行 Vim 的指令, 如移动光标, 复制/删除/粘贴文本等等, 不能进行输入(打字).
  • 插入模式/编辑模式: 进行文本输入(打字), 和普通编辑器同样
  • 替换模式: 进行字符替换
  • 可视模式/选择模式: 进行文本选择
  • 命令模式: 在 Vim 底部最后一行中输入命令, 按回车并执行

接下来我介绍如下如何进入/退出这几种状态, 我会把全部方式都列举出来, 可是如今你只需使用最简单的一种方式便可.

在开始以前, 请连续按几回 Esc 键, 保证你处于普通模式(不管你如今在任何模式下, 按 Esc 键可让你回到普通模式).

普通模式 > 插入模式

要从普通模式进入插入模式, 最简单的方法就是按 i 键, 你能够理解为 "insert". 按过 i 键以后, 你就能够打字了.

除此以外, 你还能够:

  • i/I: 在光标前面/行首插入
  • a/A: 在光标后面/行尾插入
  • o/O: 在下/上一行行首插入
  • 在插入模式下按 Ctrl-o 可进入插入-普通模式, 在此模式下能够运行一次普通模式命令, 而后就又回到插入模式.

在继续学习以前, 请先输入一些文本(最好是英文), 以供后续的操做使用. 另外, 若是操做过程当中, 你不知道本身处于什么模式了, 那就连续按几回 Esc, 回到普通模式, 再继续进行操做. 遇事不决 Esc!

普通模式 > 替换模式

在普通模式下, 按 r 键(小写)可进入替换模式, 你能够理解为"replace". 此时你再次输入的字符, 能够替换光标处的那个字符. 若是你想连续替换多个字符, 则按 R 键(大写, 即 Shift+r), 此时你的输入会不断地替换光标处的字符. 想退出持续替换模式, 按 Esc 便可.

除此以外, 你还能够:

  • 数字r: 将光标所在向后 n 个字符都替换掉, 例如 3rs 能够把光标向后的三个字符都替换成 s
  • 在持续替换模式中可以使用 Insert 键在持续替换模式和插入模式中切换

普通模式 > 可视模式

在普通模式下, 按 v 键可进入可视模式(选择模式), 你能够理解为"visual". 进入可视模式后, 你能够选择一些文本, 此时你使用 h,j,k,l 键, 能够改变选择的区域, 当你选择了一些文本后, 可使用一些执行操做你选择的文本, 这个后面再介绍. 要退出可视模式, 按 Esc 键或者 v 键.

除此以外, 你还能够:

  • V: 进入行选择模式, 整行整行地进行选择
  • Ctrl-q: 进入块选择模式. 在这个模式下, 你能够以"块" 或者说 "列" 的方式选择文本. 原本快捷键是 Ctrl+v, 可是在 Windows 上, Vim 会模仿 Windows 快捷键, Ctrl-v 是粘贴, 因此使用 Ctrl-q 进入块选择模式.

普通模式 > 命令模式

在普通模式下, 按 : 键(即 Shift+;)便可进入命令模式, 此时光标会跑到编辑器的最底部, 你能够输入一些命令, 按回车执行, 执行完命令以后自动回到普通模式, 或者你能够直接按 Esc 回到普通模式.

其余模式 > 普通模式

任何模式下, 你均可以按 Esc 回到普通模式, 一次不行就多按几回, 遇事不决 Esc.

OK, 如今你想一下记住这么多模式以及进入方法, 确定是比较困难的. 这里说一下, Vim 不是学会的, 是用会的. 与其学怎么操做, 不如按照教程本身多作几回, 多用几回天然就记住了, 不用担忧把 Vim 折腾坏了, 大不了重装(滑稽).

普通模式

接下来咱们就来学学普通模式下的一些指令. 普通模式是进入 Vim 后的默认模式, 在这种模式下, 没法输入, 只能移动光标或对文本进行操做.

在进行下面的操做以前, 请先保证你输入了必定量的文本(最好是英文. PS. 也别最好了, 请必定保证是英文, 中文会遇到一些小状况, 影响效果).

另外, 下面的指令很是多, 不可能背下来, 要经过"用"去记忆.

移动

  • h/j/k/l: 左/下/上/右移动, 这几个键就在你的右手手指下, 很方便. h 在最左边, 表示向左, l 在最右边, 表示向右, j 像个向下的箭头, 表示向下, k 则是向上. 多用用, 天然能够记住.
  • 数字h/j/k/l: 左/下/上/右移动 n 下, n 为输入的数字, 例如 3l 表示向右移动3次, 3j 表示向下移动三行
  • w: 移动到下一个单词开头. 同上, 也能够在前面加数字来重复屡次, 例如
  • e: 移动到当前或下一个单词结尾
  • ge: 移动到上一个单词结尾
  • b: 移动到当前或上一个单词开头
  • f/t: 在当前行, 移动到下一个出现某字符的位置/前, 例如 fa, 光标会移动到下一个字母a的位置
  • F/T: 在当前行, 移动到上一个出现某字符的位置/前, 例如 Fa, 光标会移动到上一个字母a的位置
  • 数字f/t: 在当前行向后移动到第 n 次出现 a 的位置/前, 例如 3fa, 光标会向后移动到第三次出现字母a的位置
  • 数字F/T: 在当前行向前移动到第 n 次出现 a 的位置/前, 例如 3Fa, 光标会向前移动到第三次出现字母a的位置
  • 0/$: 光标移动到行首/行尾
  • ^: 光标移动到到非空格的行首
  • %: 在两个匹配的符号 (, ", { 等等中切换, 光标需先移动到其中一个符号, 若是不在, 则会向后找到最近的一个
  • gg: 光标移动到第一行行首
  • G: 光标移动到最后一行行首
  • 行号G: 光标移动到对应行号行首
  • 数字%: 光标移动到指定百分比的文档位置, 例如 80%, 光标会移动到文本的 80% 处
  • {/}: 光标移动到上一段/下一段(Paragraph)的行首
  • g;/g,: Vim 内部维护着一个编辑位置历史, 使用这两个指令可在编辑位置历史中跳转.
  • H: 光标移动到当前屏幕的最上边(High)
  • M: 光标移动到当前屏幕的中间(Middle)
  • L: 光标移动到当前屏幕的最下边(Low)
  • zt/zb/zz: 把当前行置为屏幕正顶部/底部/中间
  • ``: 在两次 非行内移动 的位置之间跳转, 例如你如今在第一行, 使用 G 到达文件末尾, 此时按``, 就能够回到第一行, 另外注意, 这个指令只能在非行内的移动之间跳转, 若是你的上一次移动是行内移动, 则无效
  • J: 将下一行移动到这一行末尾(合并当前行和下一行)

注意: 数字+指令表示执行屡次指令, 数字通常放在指令以前, 不少指令前面均可以加数字, 这个技巧很重要.

复制/剪切/粘贴

在普通模式下, 能够进行文本的复制, 剪切和粘贴, 这里要注意的是, 在 Vim 中, 剪切和删除的表现效果是同样的, 剪切或删除的文本都会进入到 Vim 的寄存器里(寄存器是什么鬼, 之后会讲).

  • y: 开始复制
  • yy/Y: 复制当前行
  • 数字yy: 从当前行开始, 复制多行, 例如: 3yy 表示复制三行.
  • yh/yl: 向左/向右复制一个字符, 即 y 指令后面能够跟"移动指令"
  • y0/y$: 从光标处复制到本行开头/末尾
  • yw/ye: 复制一个单词, 或从光标处复制到本单词末尾
  • yt: 从光标处开始复制, 直到碰见某字符. 例如 yta, 表示从光标处开始复制, 直到碰见a, a不复制, 同理可以使用 yf, yF, yT
  • yG: 从当前行开始复制直到最后一行
  • ygg: 从当前行开始复制直到第一行

  • d: 开始剪切, 以后仍留在普通模式, 其用法和 y 相似, 请自行尝试
  • D: 从光标处开始剪切, 直到行尾
  • x: 剪切光标所在的字符, 以后仍留在普通模式
  • 数字x: 剪切从光标开始日后的 n 个字符, 以后仍留在普通模式, 例如 3x, 表示向后剪切3个字符
  • X: 剪切当前光标左边的字符
  • 数字X: 剪切从光标开始往前的 n 个字符, 以后仍留在普通模式, 例如 3X, 表示向前剪切3个字符

  • c 开始剪切, 以后进入插入模式, 用法和 d 相似, 请自行尝试
  • 数字c: 剪切从光标开始日后的 n 个字符, 并进入插入模式
  • C 剪切至行尾, 并进入插入模式
  • s 剪切光标所在字符, 并进入插入模式, 和 x 相似
  • S 剪切当前行, 并进入插入模式

  • p: 将复制/剪切的内容粘贴到光标后面, 若是复制/剪切的内容是整行的, 则粘贴到当前行的下面
  • P: 将复制/剪切的内容粘贴到光标前面, 若是复制/剪切的内容是整行的, 则粘贴到当前行的上面
  • 数字p/P: 粘贴屡次
  • ddp: 其实就是剪切当前行再粘贴了, 可是你会发现, 当前行和下一行换位置了
  • xp: 其实就是剪切当前光标所在字符再粘贴, 可是你会发现, 两个字符交换位置了

注意: 几乎全部的移动, 复制, 粘贴命令前面均可以加数字, 表示重复的次数, 复制和剪切指令也几乎均可以加上移动指令, 表示向某个方向复制/剪切.

查找

在普通模式下输入 / , 便可对当前文件进行文本查找.

  • /xxx: 在全文中查找 xxx, 并高亮显示, 字符 .*[]^%/?~$<> 等有特殊意义, 须要用 \ 转义
  • ?xxx: 和 / 效果同样, 只是查找方向反向
  • N/n: 在查找到的高亮位置之间先后切换, 前面能够加数字, 表示第n次出现的位置
  • /\\<xxx\\>: 匹配完整的单词, 若是某单词中只是包含 xxx, 则不会被匹配上, 因为 > 有特殊含义, 因此须要转义, 因为 \ 也有特殊含义, 须要二次转义...
  • #/*: 在某个单词上使用这两个指令, 能够移动到上一个/下一个与光标所在单词相同的单词上, 同时高亮全部相同单词, 这个指令颇有用

PS. Vim 会记录已经查找过的内容, 再次查找时, 可经过上下键来切换以前的输入

注意: 一个有用的命令: nohlsearch, 此命令能够取消当前的查找的高亮, 简写 nohl

文本操做

在普通模式下, 可使用以下指令进行简单的文本操做:

  • >>/<<: 当前行向右/向左缩进一个 Tab
  • 行号1 行号2 >>: 从行号1到行号2向右缩进一个 Tab
  • 行号1 行号2 <<: 从行号1到行号2向左缩进一个 Tab
  • gU/gu/g~: 将选中的内容转化为大/小写/大小写切换
  • u: u 指令能够对以前的操做进行 Undo, 即撤销操做
  • Ctrl-r: Ctrl-r 这个快捷键能够对以前的操做进行 Redo, 即撤销上次撤销.

其余

  • .: 普通模式中按 . (即句号键)能够重复上次的指令, 除了 u 指令. 除此以外, 从进入插入模式开始, 到回到普通模式为止, 这个过程当中发生的全部操做 也可使用 . 来回放. . 本质上是一个"宏"(什么鬼, 后面会详细讲"宏").
  • ZZ: 退出当前的文件. 我在查看不可编辑的文件时, 常常用这个指令退出文件, 好比 git log.

可视模式

普通模式中按 v 键可进入可视模式(选择模式), 按 Esc 或 v 退出, 选择过程当中可以使用普通模式的移动指令改变选择区域, 选择以后能够对选择的内容进行复制/删除等操做.

普通模式中按 V 键进入整行可视化选择, 再按 Esc/V 退出, 以"行"为单位进行选择.

可视模式下的一些技巧:

  • o: 在可视化选择模式下, 使光标移动到选择区域的另外一头
  • O: 在块可视化选择模式下, 使光标移动到这一行的另外一头
  • gg, 而后 vG, 就能够全选.
  • Ctrl-q: 块可视化选择, 其实应该是 Ctrl-v, 可是对于 Windows 的 gVim, Ctrl-v 是粘贴, 因此改成 Ctrl-q.
  • gg, 而后 Ctrl-q(Ctrl-v), 而后按 G, 就能够选择文本的第一列

命令模式

在普通模式下按 : 进入命令模式, 能够执行一些 Vim 命令, 也可执行系统命令.

在我这系列 Vim 的文章中, 我会将普通模式下的操做称之为 "指令", 而命令模式下的操做称之为 "命令", 虽然在英文中, 它们都是 "command", 可是我这里仍是想区分开来, 之后我只要说 "指令", 指的就是普通模式的操做, 而 "命令", 指的就是命令模式下的操做.

经常使用命令

  • :w: 保存当前文件, 但不退出. 注意, 若是你是直接打开 Vim, 而后开始编辑, 你是没法直接使用 w 命令保存的, Vim 会提示你没有文件名, 要解决这个问题, 你须要在 w 命令后面跟上一个路径及文件名, 好比: :w d:/temp/test.txt, 这样你才能保存当前文件. 这就比如你在其余编辑器里新建个文件, 当你要保存时, 其余编辑器会弹一个对话框, 让你选择保存路径, 只是 Vim 把这个过程命令化了.
  • :q/:q!: 退出/强制不保存退出, 在任何命令后加 ! 表示强制执行此命令.
  • :wq: 保存并退出当前文件
  • :e!: 放弃全部修改, 载入文件的初始状态, 慎用!
  • :pwd: 显示当前目录
  • :行号: 定位到对应行号, 例如 :20 可定位到第20行, 和普通模式下的 20G 效果同样.
  • 行号1,行号2 d: 删除从行号1到行号2的内容, 例如: :3,5 d 表示删除第3行到第5行, y 指令也一样适用.
  • 行号1,行号2 >>: 从行号1到行号2向右缩进一个 Tab, 同理, 也能够向左缩进
  • :! shell指令: 执行 shell(dos) 指令, 例如: :! ipconfig
  • :r! shell指令: 将 shell(dos) 指令的执行结果写到当前行的下面

PS: 在命令模式里按上下箭头能够切换以前输入的命令

替换命令

在普通模式下, 按 / 能够进行查找操做, 在命令模式下, 可以使用一些替换命令, 将查找到的文本的进行替换.

替换的基本表达式 [range]s/from/to/[flags], 表示将 range 范围的 from 替换成 to, flags 表示替换范围. 替换指令使用起来很复杂, 暂时不须要掌握.

  • :%s/aaa/bbb/g: 把全文中的全部 aaa 替换成 bbb, %s 表示所有行(range), g 表示全部匹配的(flags)
  • :s/aaa/bbb/: 把当前行的第一个 aaa 替换成 bbb, s 表示当前行(range), 不指定 flag 就只替换第一个
  • :行号1,行号2s/aaa/bbb/g: 把行号1和行号2之间的 aaa 替换成 bbb.
  • :行号1,行号2s/^/aaa/g: 把行号1和行号2之间的行前面都加上aaa(便可以使用正则, ^表示行首)
  • :行号1,行号2s/^/\/\//g: 从行号1和行号2之间的行都加上//注释(/须要转义)
  • :行号1,行号2s/\/\//g: 从行号1和行号2之间的行都去掉//注释

PS. 在替换命令中 . 表明当前行, $ 表示最后一行

小结

好了, 到此为止, Vim 的基本操做已经讲完了, 我相信你已经能够打开 Vim, 进行文字编辑, 并保存文件了.

上面列出的指令命令很是多, 须要你在使用过程当中慢慢记忆, 仍是那句话, Vim 不是学会的, 是用会的.

Vim 教程

其实我这一系列教程就不错. emmm... 真的, 看完以后, 你必定能够掌握 Vim 的基本使用以及进阶用法, 并且我还讲了一些初学者会遇到的问题, 可以解释不少奇怪的现象.

Vim 自带一个交互式教程, 在 Linux/Mac 的 Vim 中, 你能够在命令模式下输入 vimtutor 开启这个教程, 在 Windows 下, 你能够打开 Vim 安装目录下的 vim81/vimtutor.bat 来开启这个教程. 这个交互式教程会开启一个 Vim 副本, 你能够随便在里面操做, 没必要担忧搞坏. 教程比较精炼, 一小时左右能够学完, 掌握 Vim 的基本操做.

固然了, 若是你想看更详细的教程, 我推荐 Vim 的官方文档. Vim 有很是详细的官方文档, 文档就是最权威的 Vim 教程. 要查看文档, 可在命令模式下输入 help 便可. 若是要查看某个主题的帮助文档, 则输入 help <主题> 便可. 看文档的时候按 Ctrl-] 跳入某个子主题, Ctrl-t/o 跳回来.

这里有个问题: 默认状况下文档是英文的, 看起来仍是很费劲, 这里给出一份中文文档:
连接:pan.baidu.com/s/1jpCwdBPH… 提取码:cyqf
里面有 PDF 版本, 还有一个安装程序, 会自动将中文文档安装到你的 Vim 安装目录下, 很贴心吧.

不过如今仍是不建议你看文档, 很容易看懵. 仍是继续把我这系列教程看完吧.

相关文章
相关标签/搜索