VIM 常用操作

发布于 2023-12-25
本文是使用 vimtutor 对 vim 的学习总结,vimtutor 命令是 VIM 自带的一个教程,推荐使用它来学习 VIM,它会带你一步一步学习 VIM 的基本操作。 进入 VIM

VIM 常用操作

本文是使用 vimtutorvim 的学习总结,vimtutor 命令是 VIM 自带的一个教程,推荐使用它来学习 VIM,它会带你一步一步学习 VIM 的基本操作。

进入 VIM

可通过 vi filenamevim filename 命令打开文件,如果文件不存在则会新建一个文件。

大部分 Linux 发行版都会默认安装 VIM,且 vi 命令会指向 vim 命令,所以 vivim 命令是等价的。但为了避免不同发行版的差异,建议使用 vim 命令。

退出 VIM

  • :q 退出 VIM
  • :q! 强制退出 vim 不保存修改的内容
  • :w 保存修改,但不退出 VIM。
  • :wq 保存修改并退出 VIM。
  • :w filename 将修改保存到 filename 文件中,但不退出 VIM。
  • :wq! filename 将当前正在编辑的文件保存到 filename 文件中,并退出 VIM,忽略对当前文件的修改。

进入编辑模式

在 VIM 中,可以通过 i 命令进入编辑模式,此时可以对文件进行编辑。

  • i 在当前光标所在位置进入编辑模式
  • I 在当前行的第一个字符进入编辑模式
  • a 在当前光标所在位置的下一个字符进入编辑模式
  • A 在当前行的最后一个字符进入编辑模式
  • o 在当前行的下一行插入一个新行,并进入编辑模式
  • O 在当前行的上一行插入一个新行,并进入编辑模式

退出编辑模式

在 VIM 中,可以通过 ESC 键退出编辑模式。这时是命令模式,可以输入命令。

命令模式

移动光标

在 VIM 中,可以通过 h j k l 键移动光标,分别对应左、下、上、右。

删除字符

字符删除

  • x 删除光标所在位置的字符
  • X 删除光标所在位置的前一个字符

单词删除:

  • dw 删除光标所在位置到一个单词开头的字符,包括空格 (注记:delete word)
  • db 删除光标所在位置到一个单词开头的字符,包括空格 (注记:delete back)
  • de 删除光标所在位置到一个单词结尾的字符 (注记:delete end)
  • dd 删除光标所在行
  • d$ 删除光标所在位置到行尾的字符

删除命令都会将删除的内容存入剪贴板,可以通过下文的粘贴命令将剪贴板的内容粘贴到文件中。

复制粘贴

  • yy 复制光标所在行
  • yw 复制光标所在位置到一个单词开头的字符,包括空格 (注记:yank word)
  • p 粘贴剪贴板内容到光标所在行的下一行 (注记:paste)
  • P 粘贴剪贴板内容到光标所在行的上一行

还可以使用 v 进入可视模式,然后使用 h j k l 键移动光标,选中一段文本,然后按 y 复制选中的文本,再根据需要使用 pP 粘贴。(有点像鼠标拖拽选中文本,然后复制粘贴)

撤销重做

  • u 撤销上一次操作
  • Ctrl + r 重做被撤销的操作,或者说撤销撤销操作
  • U 撤销对整行的修改
  • . 重复上一次修改

查找替换

查找:

  • /word 查找 word 字符串,按 n 查找下一个,按 N 查找上一个,如果想逆向查找,可以使用 ?word 命令
  • :set ic 查找时忽略大小写 (ignore case)
  • :set is 查找时显示匹配的字符串 (ignore case)
  • :set hls 查找时高亮显示匹配的字符串 (highlight search)

查找括号匹配:

  • % 查找括号匹配,如 () [] {},光标放在括号上,按 % 可以跳转到匹配的括号上
  • :set showmatch 设置括号匹配高亮

替换:

  • r 按下 r 后输入一个字符,将光标所在位置的字符替换为输入的字符
  • R 按下 R 后进入替换模式,每输入一个字符,将光标所在位置的字符替换为输入的字符,并向右移动一个字符。按 ESC 退出替换模式
  • ce 删除光标所在位置到一个单词结尾的字符,并进入编辑模式
  • c$ 删除光标所在位置到行尾的字符,并进入编辑模式
  • :s/old/new 将当前行第一个 old 替换为 new
  • :s/old/new/g 将当前行所有 old 替换为 new (其中 g 为 global 的意思)
  • :%s/old/new/g 将所有行所有 old 替换为 new
  • :%s/old/new/gc 将所有行所有 old 替换为 new,替换前询问是否替换 (其中 c 为 confirm 的意思)
  • :n1,n2s/old/new/g 将第 n1 行到第 n2 行所有 old 替换为 new

移动光标

  • 0 移动光标到行首
  • $ 移动光标到行尾
  • gg 移动光标到文件首
  • G 移动光标到文件尾
  • nG 移动光标到第 n 行, 如 10G 移动光标到第 10 行
  • n+ 光标向下移动 n 行, 如 10+ 光标向下移动 10 行
  • n- 光标向上移动 n 行, 如 10- 光标向上移动 10 行
  • n<space> 光标向右移动 n 个字符, 如 10<space> 光标向右移动 10 个字符
  • n<enter> 光标向下移动 n 行, 如 10<enter> 光标向下移动 10 行
  • w 光标向右移动一个单词,注记:word
  • b 光标向左移动一个单词,注记:back
  • e 光标向右移动到单词结尾,注记:end

文本编辑 - 自由编辑

可以通过 i 命令进入编辑模式,此时可以对文件进行编辑。

文本编辑 - 添加

还可以通过 A 命令进入编辑模式,此时光标在当前字符的后面,可以对文件进行编辑。注意,这种模式下,无法进行删除操作。

命令量化

vim 指令中很多命令都可以量化,如删除字符, 删除行,向某个方向移动光标等,可以量化为删除多少个字符,删除多少行,向某个方向移动多少个字符等。对于这些命令,可以在命令前加上数字,如 10dd 删除 10 行,10w 向右移动 10 个单词,10b 向左移动 10 个单词,10e 向右移动 10 个单词到单词结尾,10+ 光标向下移动 10 行,10- 光标向上移动 10 行,10<space> 光标向右移动 10 个字符,10<enter> 光标向下移动 10 行。

执行外部命令

可以通过 :!command 执行外部命令,如 :!ls 执行 ls 命令,:!date 执行 date 命令。这样可以在 VIM 中执行外部命令,执行完后会返回 VIM,不会退出 VIM。

状态

  • Ctrl + g 显示当前编辑文件的状态,包括文件名,文件状态,总行数,当前行号,光标位置百分比,当前所处列号,如:
"/tmp/tutoralicW3" [已修改] 行 300 / 995 --30%-- 列 8-29                                                                                                                                                                  

辅助命令

  • :set number 显示行号

在选项前增加 no 可以关闭选项,如 :set nonumber