Liunx 学习笔记(二)vim 的使用
大约 5 分钟
前言
本篇是 Liunx 的学习笔记系列第二篇, 这一篇将介绍 vim 的使用技巧。vim 是一款终端编辑器, 是由 vi 演变而来的, 它与 vi 最大的区别是, vim 拥有代码高亮, 其他操作都是共用的。
vim 常用操作
打开文件操作
| 命令 | 作用 |
|---|---|
| vi | 进入 vi 而不读入任何文件 |
| vi [fileName] | 进入 vi 并读入指定名称的文件(新、旧文件均可)。 |
| vi +n [fileName] | 进入 vi 并且由文件的第几行开始。 |
| vi + [fileName] | 进入 vi 并且由文件的最后一行开始。 |
| vi +/pattern [fileName] | 打开文件, 并将光标置于第一个与 pattern 匹配的串处 |
| vi [fileName]....[fileName] | 打开多个文件, 依次进行编辑 |
| vi -r [fileName] | 在上次正用 vi 编辑时发生系统崩溃, 恢复 [fileName] |
| vimdiff fileA fileB | 比较编辑两个不同的文件 |
vim 操作模式转换图

插入命令
| 命令 | 作用 |
|---|---|
| a | 在光标所在行行尾插入 |
| i | 在光标所在字符前插入 |
| I | 在光标所在行行首插入 |
| o | 在光标下插入新行 |
| O | 在光标上插入新行 |
定位命令
| 命令 | 作用 |
|---|---|
| :set nu | 设置行号 |
| :set nonu | 取消行号 |
| gg | 到第一行 |
| G | 到最后一行 |
| nG | 到第 n 行 |
| :n | 到第 n 行 |
| $ | 光标移至行尾 |
| 0 | 光标移至行首 |
删除命令
| 命令 | 作用 |
|---|---|
| x | 删除光标所在处字符 |
| nx | 删除光标所在处后 n 个字符 |
| dd | 删除光标所在行 |
| ndd | 删除 n 行 |
| dG | 删除光标所在行到文件末尾内容 |
| D | 删除光标所在处至行尾内容 |
| :n1, n2d | 删除第 n1 行到第 n2 行 |
复制和剪切命令
| 命令 | 作用 |
|---|---|
| yy | 复制当前行 |
| nyy | 复制当前行(包含当前行)以下 n 行 |
| dd | 剪切当前行 |
| ndd | 剪切当前行(包含当前行)以下 n 行 |
| p | 粘贴在当前光标所在行的下一行 |
| P | 粘贴在当前光标所在行的上一行 |
| nyl | 复制 n 个字符 |
| yw | 复制一个单词 |
| y$ | 复制从当前位置到行尾 |
| yG | 复制从所在行到最后一行 |
| :n1, n2 co n3 | 将 n1 行到 n2 行之间的内容拷贝到第 n3+1 行【n3 行的下一行】 |
| :n1, n2 m n3 | 将 n1 行到 n2 行之间的内容移至到第 n3 行下 |
| J | 把下一行的数据连接到本行之后 |
替换和取消命令
| 命令 | 作用 |
|---|---|
| r | 取代光标所在处字符 |
| R | 从光标所在处开始替换字符, 按 Esc 结束 |
| u | 取消上一步操作 |
搜索和搜索替换命令
| 命令 | 作用 |
|---|---|
| /string | 搜索指定字符串 |
| :set ic | 搜索时忽略大小写 |
| :set noic | 取消搜索时忽略大小写 |
| n | 搜索指定字符串的下一个出现位置(即同方向) |
| N | 在反方向上重复上一次搜索命令 |
| :%s/old/new/g | 全文替换指定字符串;需要替换询问时, g 改成 c |
| :n1, n2s/old/new/g | 在一定方位范围内替换指定字符串;需要替换询问时, g 改成 c |
保存和退出命令
| 命令 | 作用 |
|---|---|
| :w | 保存修改 |
| :w /[path]/[fileName] | 另存为指定文件 |
| :wq, :x | 保存修改并退出 |
| ZZ | 快捷键, 保存修改并退出 |
| :q! | 不保存修改并退出 |
| :wq! | 保存修改并退出(文件所有者及 root 可使用, 通常在文件无写权限下使用) |
| :n1, n2 w ! command | 将文件中 n1 行至 n2 行的内容作为 command 的输入并执行之, 若不指定 n1, n2, 则表示将整个文件内容作为 command 的输入【注意空格】例如 :1,4 w! grep tom |
| :!command | 暂时退出 vi 并执行 shell 指令, 执行完毕后再回到 vi。【后期应该有用】 |
| :r!command | 将命令 command 的输出结果放到当前行【强大】 |
| :sh | 暂时退出 vi 到系统下, 结束时按 Ctrl + d 则回到 vi。 |
| :e [fileName] | 打开文件 [fileName] 进行编辑【相当于退出当前的并打开另一个文件】 |
| :e! | 放弃修改文件内容, 重新载入该文件编辑 |
| :w !sudo tee % | 以普通用户身份打开的 vim , 修改后以 root 身份保存 |
vim 使用技巧
导入文件内容
:r /[path]/[fileName]
导入命令执行结果
:r !command
寻找命令所在目录
:!which command
定义快捷键
:map ^P I#<ESC> # 按 Ctrl+P 组合键用 # 注释当前行
:map ^B 0x # 按 Ctrl+B 组合键删除当前行的注释
:map ^H istring<ESC> # 按 Ctrl+H 组合键在光标所在位置插入字符串
提示
:map 定义快捷键时, 按 Ctrl+V+key 定义快捷键;:map 定义的快捷键, 重启或关机失效
连续行注释
:n1,n2s/^/#/g # 在 n1 行到 n2 行首添加注释 #
:n1,n2s/^#//g # 在 n1 行到 n2 行首删除注释 #
:n1,n2s/^/\/\//g # 在 n1 行到 n2 行首添加注释 //
:n1,n2s/^\/\//g # 在 n1 行到 n2 行首删除注释 //
替换
:ab string1 string2 # 输入 string1 将会被替换成 string2
编辑模式命令, 永久生效
普通 用户
vim /home/[userName]/.vimrc
root 用户
vim /root/.vimrc
添加类似于以下命令代码, 无需添加 :
set nu
map ^P I#<ESC>
ab test this is test,this is test,this is test.

