Loading... # VIM 常用操作 本文是使用 `vimtutor` 对 `vim` 的学习总结,`vimtutor` 命令是 VIM 自带的一个教程,推荐使用它来学习 VIM,它会带你一步一步学习 VIM 的基本操作。 ## 进入 VIM 可通过 `vi filename` 或 `vim filename` 命令打开文件,如果文件不存在则会新建一个文件。 > 大部分 Linux 发行版都会默认安装 VIM,且 `vi` 命令会指向 `vim` 命令,所以 `vi` 和 `vim` 命令是等价的。但为了避免不同发行版的差异,建议使用 `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` 复制选中的文本,再根据需要使用 `p` 或 `P` 粘贴。(有点像鼠标拖拽选中文本,然后复制粘贴) ### 撤销重做 - `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` 显示当前编辑文件的状态,包括文件名,文件状态,总行数,当前行号,光标位置百分比,当前所处列号,如: ```bash "/tmp/tutoralicW3" [已修改] 行 300 / 995 --30%-- 列 8-29 ``` ### 辅助命令 - `:set number` 显示行号 > 在选项前增加 no 可以关闭选项,如 `:set nonumber` 最后修改:2024 年 04 月 16 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请我喝杯咖啡吧。