Shallow Dream

Keep It Simple and Stupid!

0%

Vim

Vim-golf 真上头...

一些说在前面的闲话

如何生成完全随机的字符串? 找一个没有用过 Vim 的人,让他退出 Vim

这个东西没用(如果你是这么认为的话),并且他确实有很多的替代品,图形化的 VsCode 也是非常不错的,所以你现在就可以退出了。

如果你没有选择退出

学一个新工具就像小时候学习使用筷子一样,一开始你会发现,用筷子远远不如你使用汤勺吃放方便,但是当你熟练使用筷子后,你会发现,那是真的爽...

安装 Vim

Windows 10

  1. 首先 powershell 中输入 vim --version
image-20230616190836142
  1. 找到 Vim 安装包

    官网下载: https://github.com/vim/vim-win32-installer/releases

  2. 下载完成后解压到对应的文件夹

  3. 此时 Vim.exe 就可以正常使用了

  4. 为了方便使用我们需要添加环境变量

    下方 path 中,添加路径,路径为 Vim.exe 所在文件夹目录

    image-20230616191308670

    添加环境变量成功后,在 powershell 中再次输入 vim --version,出现下图信息即添加成功

    image-20230616195748266

Linux

我一定会写的...

Vim 基本介绍

Vim 本身就是一种基于命令的编程语言

所以,就像编程中,你学会不同的函数后,就可以把他们组合起来,来实现一些功能

由于 Vim 有时使用组合按键,所以对后文的组合按键的表示,做一下说明

按键 表示
i i
K K
Ctrl-v ^v,Ctrl-v,<C,v>

Vim 的各种模式

Vim 是一个模式编辑器(modal editor)

这意味着 Vim 有多个操作模式,编程时会经常做不同类型的事,你可以根据要做的事情去选择不同的操作模式

image-20230616195520217

Vim 的缓冲区(buffer),窗口(window),标签页(tab)

像是很多编辑器一样,你会在编辑器中打开多个文件,并且会有多个标签页和多个窗口

Vim 也有这些概念,但是 Vim 的模式与大多数其他的编辑器有些不同

Vim 维护了一组打开的缓冲区,这是他用于打开文件的术语,它有一组打开的文件。除此以外,你可以有多个标签页,标签页里也会有窗口

但是和其他编辑器不同的是,Vim 中缓冲区和窗口之间不一定是一对一的对应关系

普通模式

大部分情况下,你将在普通模式下,移动浏览文本

移动命令

移动命令像是句子中的“名词”,直接就能产生对应效果

可以帮助你快速的在文章中浏览

  • 基本的移动: hjkl (左,下,上,右)

  • 单词:

    • w(跳转到下一个单词的开头)
    • b(跳转到上一个单词的开头)
    • e(跳转到单词的末尾,向后跳)
  • 行:

    • 0(行开头)
    • ^ (行第一个非空字符)
    • $(行末)
  • 屏幕:

    • H(当前屏幕第一行)
    • M(当前屏幕中间行)
    • L(当前屏幕最底行)
  • 浏览:

    • Ctrl—u(向上滚动)
    • Ctrl—d(向下滚动)
  • 文件:

    • gg (文件最开始)
    • G (文件最后)
  • 行号:

    • :{number}<CR> 或者 {number}G (绝对行号)
  • 查找:

    • f{字符} 当前行查找这个字符
    • t{字符} 当前行查找这个字符,然后光标移动到他前一个字符
    • F{字符}T{字符} 同样的道理,当前行向前寻找
    • /{字符} 全文查找这个字符
    • ?{字符} 当前位置向前搜索
    • n 下一个 “next”

编辑命令

编辑命令像是动词,有时候需要和移动命令相结合,来实现功能(动词+名词)

  • i 进入插入模式
  • o/O 在当前行下/上新建一行,并进入编辑模式
  • d{移动命令} 删除所选部分
    • 例如:dw 删除一个单词,d0 删除当前到行首部分
  • c{移动命令} 删除所选部分并进入插入模式,就是改变 “change”
    • 例如:cw 改变一个单词,相当于dw 然后i
  • 上述两个按键需要移动参数,当重复按的时候对当前行生效
    • dd 删除当前行
    • cc 删除当前行,并进入插入模式(改变当前行)
  • x 删除当前光标处字符
  • r{字符} 用输入的字符,替换当前光标处字符
  • u 撤销 “undo”
  • Ctrl-r 重做 “redo”
  • y{移动命令} 复制 “yank”
  • p{移动命令} 粘贴 “paste”
  • v 进入普通可视模式
  • ~ 反转大小写

计数

你可以给操作一个数字

  • {数字}{操作} 执行{数字}次{操作}
    • 向下移动四行 4j
    • 删除七个单词 7dw
  • Ctrl-a 当前光标数字+1
  • Ctrl-x 当前光标数字-1

操作

你同样可以对命令进行操作

  • . 重复上一个命令

修饰符

用来与括号,引号一类的字符交互

  • a 周围或者包括 “around”
  • i 内部 “inside”
    • ci[ 改变 [ ] 内部 (change “ [ ] ” inside)
    • ca{ 改变 { } 周围 (change “ { } ” around)
    • da' 删除 ‘ ’ 周围 (delete “ ‘ ’ ” around)

可视模式

用于选择

  • v 普通可视模式:选中两点之间的文本
  • V 可视行模式:移动中每次直接选中一行
  • Ctrl-v 可视块模式:选中矩形块

命令行模式

通过键入 : 从普通模式进入命令行模式,此时光标将会跳转到屏幕底部

该模式有很多的功能,包括打开文件,保存文件,关闭文件,退出 Vim

  • :q 退出 “quit”(关闭当前窗口)
  • :w 保存 “write”
  • :wq 保存并退出
  • :e {文件名字} 打开文件进行编辑
  • :ls 展示打开的缓存区
  • :help {某个操作} 给出这个操作的使用帮助
    • :help :w 打开 :w 这个写入操作的使用帮助
    • :help w 打开 w 这个移动操作的使用帮助

练习 Vim 的小游戏

拜托,上手一个东西最快的方式一定是像游戏一样,操作,死掉,重新来过

  • 冒险小游戏: https://vim-adventures.com/
  • Vim-golf: http://www.vimgolf.com/

Vim 的简单配置

由于个人习惯不同,Vim 的操作键位不同,一些显示辅助功能也需要自己配置

所以需要设置 .vimrc

  1. 打开 powershell,输入 vim --version,可以看到,系统 vimrc 文件,用户的 vimrc 文件的对应位置

    image-20230616203644983
  2. 我们对用户的 vimrc 文件进行修改,在对应的目录输入 vim ~\.vimrc :创建 .vimrc 文件,并使用 Vim 将其打开

  3. 之后在打开的文件中输入对应的配置语句,Vim 中会出现对应的效果

    image-20230616204428595

    如图,这里添加了 set nu,显示行号,保存重新打开 Vim

    image-20230616204544058

    左侧显示行号

这里给出 MIT 老师的提供的配置文件: https://github.com/missing-semester/missing-semester/blob/master/_2020/files/vimrc

参考

  1. 2020 MIT 公开课: The Missing Semester of Your CS Education(计算机教育中缺失的一课)
  2. 一位不知名大佬的博客: https://www.mintimate.cn/2021/08/25/vim/