vi/vim使用命令

你是否在编辑文件时以为键盘坏了,为什么不能删除呢,为什么不能敲代码呢,等你初识vi,会觉得这个东西为什么设计得这么难用,这篇教程带你熟练得用上这款经典的工具
Vi 是在 Unix 系统上广泛使用的编辑器,Vim 是 Vi 的改进版本,由 Bram Moolenaar 在 1991 年发布,Vim兼容vi命令,现在很多系统将vi符号链接到Vim,所以使用vi命令其实还是用的Vim

安装Vim

#centos
sudo yum update
sudo yum install vim

#debian/ubuntu
sudo apt update
sudo apt install vim

直接输入vi a.txt可以打开文件,文件不存在则创建新文件,按下i进入插入模式,输入4*4的a矩阵,按下esc即可退出到命令模式

修改vim配置文件

#查看vim信息
vi --version

image.png

#编辑vim配置
vi $HOME/.vimrc

#语法高亮
syntax on
#tab占4个空格
set ts=4
#将tab转换为空格
set expandtab
#显示行号
set number
#实时计算其他行与当前行的距离
set relativenumber

image.png

命令模式(Command Mode)

当我们进入文件时处于命令模式,新建一个文件复制一篇英语作文,按下i,windterm再按Shist+Insert粘贴,练习一下就会了

命令模式才能移动光标,也就是刚进入文件的模式或者插入模式按下esc

vi/vim区分大小写,它设计的目的是让你用键盘解决问题,不需要用到鼠标

命令 移动光标
K
J
H
L
2k 向上移动2行(未配置set relativenum)
4j 向下移动4行(未配置set relativenum)
4Enter 向下移动4行
2k 移动到对应往上2行的行号,不用自己算多少行,实时显示其他行到当前行的距离(配置set relativenum)
4j 移动到对应往下4行行号,不用自己算多少行,实时显示其他行到当前行的距离(配置set relativenum)
n2空格 number,跳到当前光标后指定2的位置,按下n,再输入数字,再按空格,,例如跳到当前光标后6位:n 6 空格
0Home 数字0,移动到行首
$End 移动到行尾
w 向后跳到每个单词开头,括号也算一个单词
e end,向后跳到每个单词末尾,括号也算一个单词
b back,回到上一个位置,括号也算一个单词
- 移动到非空格上一行
+ 移动到非空格下一行
gg 移动到最顶部
GShift+g 将光标移动到整个文档的最后
4G4 Shift+g 将光标移动到整个文档的第4行
HCtrl+h 光标移动到屏幕的最上方那一行的第一个字符
MCtrl+m 光标移动到屏幕的最上方那一行的第一个字符
LCtrl+l 光标移动到屏幕的最上方那一行的第一个字符
Ctrl+fPage Down 屏幕向下移动一页
Ctrl+bPage Up 屏幕向上移动一页
Ctrl+d 屏幕向下移动半页
Ctrl+u 屏幕向上移动半页
命令 修改
y0 yank,复制当前行光标位置到行首的内容
y$ yank,复制当前行光标位置到行尾的内容
y1G yank,复制当前行到第一行的内容
yG yank,复制当前行到最后一行的内容
yy yank,复制当前行
10yy yank,复制当前行往下的10行内容
yw 复制一个单词
p 粘贴到光标下一行
PShift+p 粘贴到光标上一行
4p 粘贴4次
J 将当前行与下一行合成同一行,删除回车
r* 替换当前光标所选的字符,例如将当前光标所指替换为s:rs
RShift+r REPLACE,替换模式,按下R后,再输入字符替换当前光标所选的字符并将光标向后移动
dd delete,删除当前行
dw 删除一个单词但不进入插入模式
cw 删除一个单词并进入插入模式
x 删除当前光标所指的字符
ci+{ci+}ci+[ci+]ci+(ci+) change in,清除当前光标所在括号内的内容并切换到插入模式
. 英语句号,重复上一次修改操作,例如删除、替换、插入
u undo,撤销上一步操作
Ctrl+r 重做上一步撤销动作,回退撤销
Ctrl+v visual block,视觉模式,选择单个字符,通过hjkl移动光标来选择字符,按d删除选中内容并回到命令模式
Shift+v visual block,视觉模式,选择整行,通过hjkl移动光标来选择字符,按d删除选中内容并回到命令模式

插入模式(Insert Mode)

命令模式按以下命令键进入插入模式(插前附后),有的远程连接工具会在左下角显示INSERT,也就是刚进入文件的模式到可以输入的模式

image.png

命令 输入字符时插入的位置
i 光标左边,esc退出
a append,光标后,esc退出
IShift+i 行首,esc退出
AShift+a 行尾,esc退出
entre 换行
Insert 切换插入/替换模式
o open a new line,新建下一行
OShift open a new line,新建上一行
BackSpace 删除光标前一个字符
Delete 删除光标后一个字符
esc 退出插入模式命令模式

命令行模式(Command-Line Mode)

再按下esc退出插入模式命令模式,在命令模式输入:/进入命令行模式

image.png

命令 解释
:set nu 设置行号(未配置set relativenum
:set nonu 取消行号(未配置set relativenum
:q 仅退出,文件没有编辑即可仅退出,quit
:q! 不保存退出
:w write,保存但不退出
n 移动到下一个匹配项
:r 文件名 将另一文件内容添加到当前光标后面
:w 文件名 另存为
ZZShift+z Shift+z write&quit,保存退出
/* 向前搜索匹配并移动光标到对应位置,例如查找当前光标位置前的hello:/hello
?* 向后搜索匹配并移动光标到对应位置,例如查找当前光标位置后的hello:?hello
n 移动到下一个匹配项
NShift+n 移动到上一个匹配项
:%s/old/new/g 全局替换,例如全局替换hello为hello world::%s/hello/hello world/g
:%s/old/new/g 全局替换,替换前提示每个是否确认替换(),例如全局替换hello为hello world::%s/hello/hello world/gc
escEnterctrl+c 退出命令行模式
  • y:将当前匹配项替换为新的内容并继续执行下一个匹配项的替换
  • n:跳过当前匹配项,不进行替换,并继续执行下一个匹配项的替换
  • a:替换所有剩余的匹配项,不再提示每个匹配项
  • q:立即退出替换操作,不进行任何替换
  • l:将当前匹配项替换为新的内容并退出替换操作,不进行下一个匹配项的替换
  • ^E:向上滚动一行,显示上面的内容
  • ^Y:向下滚动一行,显示下面的内容

相关推荐

  1. MySQL 使用命令

    2024-06-14 09:36:02       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-14 09:36:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-14 09:36:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-14 09:36:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-14 09:36:02       18 阅读

热门阅读

  1. 揭开 Docker 容器的神秘面纱:深入理解容器原理

    2024-06-14 09:36:02       10 阅读
  2. adb简单使用命令

    2024-06-14 09:36:02       6 阅读
  3. Leetcode.2862 完全子集的最大元素和

    2024-06-14 09:36:02       6 阅读
  4. flume配置----a1.sources.r1.positionFile=xxxx.json

    2024-06-14 09:36:02       8 阅读
  5. 【安全函数】常用的安全函数的使用

    2024-06-14 09:36:02       6 阅读
  6. 快速入门Flutter:从零开始构建你的第一个应用

    2024-06-14 09:36:02       6 阅读