vi\vim命令
什么是vi\vim
vi是linxu Unix系统内置的文本编辑器。vim相当于vi的一个升级版本,增加了一些编程能力。vi是一款文本编辑器,而vim是一款程序开发工具。
三种模式
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和末行命令模式(Last line mode)。刚进入vi/vim是命令模式,输入的字符都会被当做命令解析。输入i\I\O\o\A\a等命令会进入编辑模式。Esc
会退出编辑模式,回到命令模式。命令模式下输入冒号(:)会进入末行模式。Esc
会退出末行模式,进入命令模式。
命令模式下的命令
文本修改命令
i
:在当前光标之前插入文本
I
:在当前光标所在行首字符之前插入文本
a
:在当前光标之后插入文本
A
:在当前光标所在行末字符之后插入文本
o
:在当前光标所在行的下一行插入一行空行
O
:在当前光标艘在行的上一行插入一行空行
文本删除命令
x
:删除光标所处的字符
X
:删除光标前面的字符
dd
:删除光标所在的整行。在dd前加数字n,可删除当前行以及以后的n行。
D或d$
:删除光标所处位置到行末尾之间的内容
d0
:删除行首字符到光标所处位置之间的内容
dw
:删除光标所处位置到单词的末尾。在dw加数字n,可删除当前单词以及之后的n个单词
d(
:该命令删除到上一句开始的所有字符。
d)
:该命令删除到下一句开始的所有字符。
d}
:该命令删除到上一段开始的所有字符。
d{
:该命令删除到下一段开始的所有字符。
d<CR>
:该命令(表示回车)删除包括当前行在内的两行字符。
复制文本命令
yy
:复制光标所处行。在命令前加数字n,可复制当前行以及以后n行文本。
Y或y$
:复制光标所在位置到行末尾字符之间的内容
y0
:复制光标所在位置到行首字符之间的内容
yw
:复制光标所处位置到单词的末尾。在yw加数字n,可删除当前单词以及之后的n个单词
y(
:复制到上一句的开始的所有字符。
y)
:复制到下一句的开始的所有字符。
y{
:复制到上一段的开始的所有字符。
y}
:复制到下一段的开始的所有字符。
y<CR>
:复制包括当前行在内的两行内容。
文本选中命令
v
:在光标所处位置按下v按照块(即字符)选择文本。
V
:在光标所处位置按下V按照行选择文本。
两者的区别从光标开始位置前者是按照字符一个个选中,后者是按照一行行选中。
文本粘贴命令
p
:粘贴命令。粘贴当前缓冲区中的内容。
撤销命令
u
:撤销上一命令对编辑缓冲区的修改。相当于Cltr+z。
U
:恢复当前行(即一次撤销对当前行的全部操作)
Ctrl+r
:还原撤销。相当于Cltr+y。
u
和U
的区别在于他们两个撤销的级别不同。前者是缓冲器级别,后者是行初始状态级别。
例如:
vi abc.txt
文件,有一行文本123
进入编辑模式,添加456文本。Esc进入命令模式。
进入编辑模式,添加abc文本。Esc进入命令模式。
最终文件的内容为123456abc,此时输入U
是将行撤销到123,输入u
是撤销到123456,在输入一次u是还原到123。
光标移动命令
h
:向左移动光标
j
:向下移动光标
k
:向上移动光标
l
:向右移动光标
字符替换命令
r
:替换光标所在的字符。
R
:进入替换模式,每个输入的字符都会替换当前光标下的字符,按Esc退出替换模式。
末行模式下的命令
退出命令
:q
:退出vi编辑器。如果文件内容修改,将不会退出vi编辑器,会提示修改的内容为保存
:q!
:强制退出编辑器。无论文件修改修改都退出vi编辑器,修改的内容不会保存到文件中
:w
:将文件修改的内容写入文件。:w 文件名
表示将当前文件内容另存为一个新的文件,如果这个文件以及存在将会给出提示。
w!
:与’w’命令类似,不同的是w! 文件名
会覆盖以及存在的文件。
wq
:保存并退出vi编辑器。如果当前vi编辑器未指定文件名,需要使用wq 文件名
来给文件命名
字符串查找
:/string
:光标所在处向上查找string
:?string
:光标所在处向下查找string
n
:重复上一条检索命令
N
:重复上一条检索命令,但是查找方向改变。例如上次的检索命令是向前检索,那么此次检索的方向是向后;如果上次的检索命令是向后检索,那么此次检索的方向是向前
:g/string
:列出所有配置string的行
替换命令
:[range]s/s1/s2/ [option]
:其中
[range]
:表示替换的范围。1,10表示1到10行。%或1,&整个文件。.,$当前行到文件末尾
s
:表示替换命令
/s1
:被替换的字符串
/s2
:替换的字符创
[option]
:表示替换选项。/g不需要确认直接替换。/c替换前需要用户确认。
关于行号的命令
:set nu
:显示行号
:行号
:跳转到制定的行
gg
跳转到第一行
GG
跳转到最后一行
其它命令
:registers
:显示寄存器中的内容
小技巧
当前文件中复制一段内容插入到最后一行
- 使用
V
命令选中需要复制的行。 - 使用
y
命令对选中的内容进行复制(这时是复制到了缓冲区中)。 - 将光标移动到最后一行,使用
o
命令插入一行空行。 - 使用
p
命令将复制到缓冲区中的内容复制到文件最后。
注意:使用y
命令复制的内容只在当前文件的缓冲区内。使用Ctrl+v或Shift+ins是复制不到其它地方的。
跳转到匹配的行查看前后消息
:g/string
使用技巧:
set nu
列出行号:g/string
列出所匹配到的行,行会带有行号:行号
跳转到所在的行
从第一行向下查找string
:1
跳转到第一行。或gg
跳转到第一行。GG
跳转到最后一行。:/string
查找stringn
依次向下查找string
从最后一行向上依次查找string类似。
参考资料:
http://c.biancheng.net/vi/
https://www.runoob.com/linux/linux-vim.html
快捷键位图
https://www.runoob.com/w3cnote/all-vim-cheatsheat.html