Vim cookbook

Vimtutor

Posted by Kylin on April 18, 2023

Vimtutor

[TOC]

1-3-1

Vim简介

Vim 具有 6 种基本模式和 5 种派生模式,我们这里只简单介绍下 6 种基本模式:

  • 普通模式(Normal mode)

在普通模式中,用的是编辑器命令,比如移动光标,删除文本等等。这也是 Vim 启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。

在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按 a(append/追加)键或者 i(insert/插入)键。

  • 插入模式(Insert mode)

在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。

在插入模式中,可以按 ESC 键回到普通模式。

  • 可视模式(Visual mode)

这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。 Vim 的”文本对象”也能和移动命令一样用在这个模式中。

  • 选择模式(Select mode)

这个模式和无模式编辑器的行为比较相似(Windows 标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim 会用这个字符替换选择的高亮文本块,并且自动进入插入模式。

  • 命令行模式(Command line mode)

在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim 返回到命令行模式之前的模式,通常是普通模式。

  • Ex 模式(Ex mode)

这和命令行模式比较相似,在使用 :visual 命令离开 Ex 模式前,可以一次执行多条命令。

这其中我们常用到就是普通模式、插入模式和命令行模式,本课程也只涉及这三个常用模式的内容。

Vim基础操作

使用 vim 命令进入 vim 界面

  • 直接打开
vim practice_1.txt
  • 在命令行模式下打开
vim

//进入命令行模式后输入 :e \<filepath\> 同样可以打开相应文件
//普通模式下输入:即进入命令行模式

普通模式:光标移动

截屏2021-09-06 下午8.35.57

普通模式 –> 插入模式

截屏2021-09-06 下午8.56.35

普通模式 –> 命令行模式

  • 从普通模式输入 : 进入命令行模式,输入 w 回车,保存文档。输入 :w <filename> 可以将文档另存为其他文件名或存到其它路径下。

普通模式:退出

  • Shift+zz:保存且退出

命令行模式:退出

  • 从普通模式输入 : 进入命令行模式,输入 wq 回车,保存并退出编辑。

截屏2021-09-06 下午9.07.51

普通模式:删除

截屏2021-09-06 下午9.11.12

2dd表示一次删除2行,因此可以用n+命令

普通模式:重复命令

  • 点操作

普通模式下输入 x,删除第一个字符,输入 .(小数点)会再次删除一个字符,除此之外也可以重复 dd 的删除操作。

  • N+操作

进入普通模式输入 N<command>,N 表示重复后面的次数

Eg.

输入 10x,删除 10 个连续字符

输入 3dd,将会删除 3 行文本

在普通模式下,你还可以使用 dw 或者 daw(delete a word)删除一个单词,所以你可以很容易的联想到 dnw(n 替换为相应数字) 表示删除 n 个单词。

命令模式:显示行号

:set nu

普通模式:游标跳转

  • 行间跳转

截屏2021-09-06 下午9.33.23

  • 跳回上一次位置:完成依次跳转后,使用 Ctrl+o 快速回到上一次(跳转前)光标所在位置

  • 行内跳转

截屏2021-09-06 下午9.40.19

f、F操作十分实用

普通模式:复制、粘贴、剪切

  • 复制粘贴

截屏2021-09-06 下午9.59.48

  • 剪切粘贴

删除命令就是剪切(如dd),你每次删除文档内容后,便可以使用以上粘贴命令来粘贴

普通模式:撤销(undo)、重做(redo)操作

截屏2021-09-06 下午10.15.44

普通模式:替换

截屏2021-09-06 下午10.19.53

普通模式:快速缩进、文本位置调整

  • 普通模式下输入 >> 整行将向右缩进(使用,用于格式化代码超爽)
  • 普通模式下输入 << 整行向左回退
  • 设定缩进
:set shiftwidth?
//获取目前设定值

:set shiftwidth=10

//shiftwidth可以简写为sw
  • 文本位置调整:

截屏2021-09-06 下午10.38.40

普通模式:查找

  • 快速查找

普通模式下输入 / 然后键入需要查找的字符串,按回车后就会进行查找。

? 与/ 功能相同,只不过 ? 是向上而 / 是向下查找。

进入查找之后,输入 n 和 N 可以继续查找。 n 是查找下一个内容,N 查找上一个内容。

命令行模式下输入 noh 然后回车即可取消搜索

tips: 搜索高亮需要在配置文件 .vimrc 中设置 set hls

  • 高级查找

普通模式下输入 * 寻找游标所在处的单词

普通模式下输入 # 同上,但 # 是向前(上)找,* 则是向后(下)找

普通模式下输入 g* 同 *,但部分符合该单词即可

普通模式下输入 g# 同 #,但部分符合该单词即可

进入查找之后,输入 n 和 N 可以继续查找。 n 是查找下一个内容,N 查找上一个内容。

补充操作

普通模式:反转字母大小写

普通模式:交换上下行

ddp

本质是删除+行后粘贴

Vim 高级功能

多文件编辑

  • 打开多个文件/多个文件切换
vim 1.txt 2.txt 3.txt
//打开3个文件

命令行模式下输入 :n 编辑 2.txt 文件,可以加 ! 即 :n! 强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件

命令行模式下输入 :N 编辑 1.txt 文件,可以加 ! 即 :N! 强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件

  • 在vim中打开新文件/文件切换

截屏2021-09-06 下午11.03.08

恢复文件

如果因为断电,终端意外关闭等原因造成文档没有保存,可以采用恢复方式。

vim 在编辑的时候会自动在当前文件目录下生成一个交换文件,一般以 <filename>.swp 的格式保存,如果有多个版本的交换文件,还可能是 .swn,.swm 等字母。注意这个交换文件的更新不是实时的,因为实时的更新会占用磁盘,影响系统其他正常进程的速度。

当 vim 意外终止且没有保存已编辑的内容时,可以使用交换文件对文件进行恢复,注意需要在编辑这个文件的地方进行编辑,因为交换文件默认在编辑的目录生成。

例如假设 1.txt 意外关闭,我们可以输入 vim 然后输入 :recover 1.txt

vim
:recover 1.txt

# 出现如下提示按下回车即可恢复,如果有多个版本需要输入对应的交换文件前的数字选择要恢复的版本。
Using swap file ".1.txt.swp"
Original file "~/test/1.txt"
Recovery completed. You should check if everything is OK.
(You might want to write out this file under another name
and run diff with the original file to check for changes)
You may want to delete the .swp file now.

或者输入 vim -r 后直接选择用于恢复的文档的交换文件即可:

vim -r 1.txt

可视模式

截屏2021-09-06 下午11.15.19

视窗操作

截屏2021-09-07 上午7.58.08

截屏2021-09-07 上午8.01.17

Ctrl+w 进行视窗间的跳转

帮助系统

截屏2021-09-06 下午11.22.57

帮助系统实质也是一个vim,所以退出是一样的

Vim在线系统:http://vimdoc.sourceforge.net/htmldoc/usr_toc.html

Vim 加密

vim -x file1

输入您的密码,确认密码,这样在下一次打开时,vim 就会要求你输入密码。

Vim执行外部命令

截屏2021-09-06 下午11.10.32

Vim功能设定

截屏2021-09-07 上午8.40.02

截屏2021-09-07 上午8.41.44