vim技巧

2023-07-30 16:42:16 浏览数 (2)

简介

得益于 vim 的指法,敲起代码来如行云流水。不管是不是写代码,学好vim 指法相当重要,当然最重要的还是为了效率,节省时间做更多其他的事。

小技巧

“工欲善其事,必先利其器”。在 Vi/Vim 版本的选择上,原则是“能用 Vim 就不要使用 Vi”。Vim 提供的功能和特性要比 Vi 多得多,如语法加亮着色功能等。就使用效果及效率来说,编辑同样的文件,使用 Vim 更胜一筹;就版本来说,新版的往往会修复旧版的一些缺陷及不足。这就要求我们在可能的情况下一定要使用最新版的 Vim。

启动及关闭

  • 退出
    • ZQ 无条件退出
    • q!无条件退出
    • ZZ 存盘并退出
    • :wq 存盘并退出
  • 保存部分文件
    • :m,nw < file>将 m 行到 n 行部分的内容保存到文件 中
    • :m,nw >> 将 m 行到 n 行的内容添加到文件 的末尾
  • 保存文件
    • :w

教程篇

默认的 vim 是没有显示行数的,可自行在 vim 配置文件里开启(自行Google)

Vi/Vim 中操作单位有很多,按从小到大的顺序为(括号内为相应的操作命令):字符(h、l)→ 单词 (w、W、b、B、e) → 行 (j、k、0、^、、:n) → 句子((、))→ 段落({、})→ 屏 (H、M、L) → 页(Ctrl-f、Ctrl-b、Ctrl-u、Ctrl-d) → 文件(G、gg、:0、:)。

  • 字符
    • h左移一位,l右移一位
  • 单词
    • w/W 移动到下一单词的开头
    • b/B 移动到上一单词的开头
    • e/E 移动到光标所在单词的末尾
    • f 快速移动到下一个字符的位置
    • j 下移一行
    • k 上移一行
    • 0 移到当前行开头
    • ^ 移到当前行的第一个非空字符
    • $ 移到当前行末尾
    • :n 移动到第 n 行
  • 句子
    • ) 移动到当前句子的末尾
    • ( 移动到当前句子的开头
  • 段落
    • } 移动当前段落的末尾
    • { 移到当前段落的开头
    • H 移动到屏幕的第一行
    • M 移动到屏幕的中间一行
    • L 移动到屏幕的最后一行
    • Ctrl-f 向前滚动一页
    • Ctrl-b 向后滚动一页
    • Ctrl-u向前滚动半页
    • Ctrl-d 向后滚动半页
  • 文件
    • G 移动到文件末尾
    • gg 移动到文件开头
    • :0移动到文件第一行
    • :$ 移动到文件最后一行

文本编辑

与光标移动一样,Vi/Vim 中关于编辑操作的命令也比较多,但操作单位要比移动光标少得多。按从小到大的顺序为(括号内为相应的操作命令):字符 (x、c、s、r、i、a)→ 单词 (cw、cW、cb、cB、dw、dW、db、dB) → 行 (dd、d0、d$、I、A、o、O) → 句子((、))→ 段落({、})。这些操作单位有些可以加操作次数。操作对象的范围计算公式为:操作范围 = 操作次数 * 操作单位。比如:d3w 命令删除三个单词,10dd 命令删除十行。

  • 字符
    • x 删除光标位置的字符
    • c 更改当前字符并进入插入模式
    • s 替换光标位置的字符并进入插入模式
    • r 替换光标位置的字符但不进入插入模式
    • i 在当前位置的字符之前进入插入模式
    • a 在当前位置的字符之后进入插入模式
  • 单词
    • cw/cW 删除当前单词从光标开始的部分并进入插入模式
    • cb/cB 删除当前单词从光标所在位置至单词开始的部分并进入插入模式
    • dw/dW 删除当前单词从光标开始的部分但不进入插入模式
    • db/dB 删除当前单词从光标所在位置至单词开始的部分但不进入插入模式
    • dd 删除当前行
    • d0 删除从当前光标开始到行末的内容
    • d$ 删除从当前光标开始到行末的内容
    • I 在当前行的行首进入插入模式
    • A 在当前行的行尾进入插入模式
    • o 在当前行下方另起一行进入插入模式
    • O 在当前行上方另起一行进入插入模式
  • 句子
    • d) 删除当前句子从光标位置开始到句末的内容
    • d( 删除当前句子从光标位置开始到句首的内容
  • 段落
    • d} 删除当前段落从光标位置开始到段末的内容
    • d{ 删除当前段落从光标位置开始到段首的内容

文本编辑的高效命令

  • 复制与粘贴
    • yw 复制当前单词从光标开始的部分
    • yy 复制光标所在行的所有字符
    • p 将最后一个删除或复制文本放在当前字符
    • P 将最后一个删除或复制文本放在当前字符之前
  • 撤消与重做
    • u 撤消更改
    • Ctrl-R 重做更改
  • 重复操作
    • .重复上次操作
  • 交换相邻字符或行
    • xp 交换光标位置的字符和它右边的字符
    • ddp 交换光标位置的行和它的下一行
  • 大小写转换
    • ~ 将光标下的字母大小写反向转换
    • guw 将光标所在的单词变为小写
    • guw 将光标所在的单词变为小写
    • gUw 将光标所在的单词变为大写
    • guu 光标所在的行所有字符变为小写
    • gUU 光标所在的行所有字符变为大写
    • g~~ 光标所在的行所有字符大小写反向转换
  • 排序
    • :1,$!sort 将文件内的所有内容排序

other

先定单位再定量

操作对象的范围计算公式为:操作范围 = 操作次数 * 操作单位。比如:5h 命令左移 5 个字符,8w 命令右移 8 个单词。

0 人点赞