#命令模式:默认模式,移动光标,剪切、粘贴文本
hjkl
ZZ:保存,退出
ZQ:不保存,退出
#插入模式:修改文本
i:插入光标所在处
I:当前所在行行首
a:append光标所在处追加
A:所在行,行尾追加
o:所在行下方插入新行
O:所在行上方插入新行
退出插入模式
esc
#扩展模式:保存,退出等
w:write
q:quit
wq:保存退出
!:force
q!:不保存退出
x:保存退出
X:加密
r file:读入内容到当前文件
w file1:将当前内容写入到另一个文件
!command:执行linux命令
r!command:读入命令的执行结果
#可视化模式
-----------------------------------------------------------------
#打开文件
# vim[option] ...file...
+# 打开文件后,让光标处于第#行的行首,+默认行位
eg:
vim +10 /etc/passwd
+/pattern 打开文件后,直接让光标处于第一个被pattern匹配到的行行首
eg:
vim +/^ftp /etc/passwd
-b file 以二进制方式打开文件
-d file1 file2...比较多个文件
eg:
vim -d f1 f2
-m file 只读模式打开文件
eg:
vim -d f1 //用来打开关键文件比较好
-e 直接进入ex模式
eg:
echo 12345 >file1
echo 67890 >file2
vim -e file1
r file2
visual
把文件2的内容读入到文件1中
-----------------------------------------------------------------
#扩展模式
w:write
q:quit
!:force
x:保存退出
r file:读入内容到当前文件
eg:
echo 12345 >file1
echo 67890 >file2
vim -e file1
r file2
visual
把文件2的内容读入到文件1中
w file1:将当前内容写入到另一个文件
在扩展模式下,执行该命令可以将当前文件另存为,但是继续修改的内容仍然是当前文件
!command:执行命令
在扩展模式下,可以执行linux命令,无需退出vim
eg:
!cat /etc/centos-release
按enter键退出,返回到vim中
r!command:读入命令的输出
可以将执行命令的回传内容,写入当前文档中
eg:
r!cat /etc/centos-release
直接读入cat结果
-----------------------------------------------------------------
#命令模式光标跳转
##字符间跳转
h:← l:→ j:↓ k:↑
#command:跳转由#指定的个数的字符
eg:
5j:向下跳五行
6l:向右跳5个字符
...
##单词之间跳转
w:下一个单词
b:调到当前单词词首
e:调到当前单词词尾
#command:跳转#个单词,参考上面hjkl用法
##当前页跳转:
H:当前可视屏幕的第一行行首
M:当前可视屏幕的中间行首
L:当前可视屏幕的最下一行行首
zt:把光标所在当前行移动到屏幕顶端,浏览页面用
zz:把光标所在当前行移动到屏幕中间,浏览页面用
zb:把光标所在当前行移动到屏幕底端,浏览页面用
##行首行尾跳转
^:跳转到行首的第一个非空白字符
0:跳转至行首
$:跳转至行尾
##行之间移动:
#G或者扩展模式下输:# //跳转第#行
G:最后一行
gg、1G或者扩展模式下输:1 //第一行
##句子之间移动:句子和句子之间以“.”区分
):下一句
(:上一句
##段落间移动:段落与段落之间按照空行区分
}:下一段
{:上一段
##翻屏操作
ctrl+b:向上翻一屏pageup
ctrl+u:up半屏
ctrl+d:down半屏
ctrl+f:向下翻一屏pagedown
-----------------------------------------------------------------
#命令模式操作
##字符编辑
x:剪切光标处的字符
#x:删除光标处起始的#个字符
p:在光标之后粘贴
~:大小写翻转
J:删除当前行的回车字符
##替换命令
r:替换光标所在处的字符
R:切换成replace模式,后面的字符直接被输入覆盖
d:删除,可结合光标跳转字符,实现范围删除
d$:删除道行尾
d^:删除到非空行首
d0:删除到行首
dw:删除单词
de:删除到词尾
db:删除到词首
dG,dgg...
#command:5dw,4dd
dd:剪切当前行
#dd:剪切多行
D:从当前光标位置删除到行尾,等同于d$
#复制命令(y.yank)
y:复制,行为类似d命令
y$:
y0:
y^:
ye:
yw:
yb:
#command
yy:复制行
#yy:复制多行
Y:复制整行
#粘贴
##复制一个单词情况下
P:在光标前粘贴
p:在光标后粘贴
##复制一句话情况下
P:在行前粘贴
p:在行后粘贴
#改变命令
c:修改后切换成插入模式
命令模式-->插入模式
c$:
c^:
c0:
cb:
ce:
cw:
#command
cc: 删除当前行并输入新内容,相当于$
#cc
C:删除当前光标到行尾,并切换成插入模式
命令模式:操作文本
|change(replace)|delete(cut)|yank(copy)
------------------------------------------------------------
line |cc |dd |yy
letter |cl |dl |yl
word |cw |dw |yw
sentence ahead |c) |d) |y)
sentence behind |c( |d( |y)
paragraph above |c{ |c{ |y{
paragraph below |c} |c} |y}
------------------------------------------------------------
命令行模式按100,再按i,输入wangjing,按esc,把wangjing重复100遍
<start position><command><end position>
<command>:
y复制、d删除、gU变大写、gu变小写
例如0y$命令意味着:
0->先到开头
y->从这里开始拷贝
$->拷贝到本行最后一个字符
ye从当前位置拷贝到本单词的最后一个字符
di":光标在""之间,则复制""之间的内容
yi(:光标在()之间,则复制()之间的内容
vi[:光标[]之间,则选中[]之间的内容
dtx:删除字符直到遇见光标之后的第一个x字符
ytx:复制字符直到遇见光标之后的第一个x字符
------------------------------------------------------------------
#扩展模式:范围的选择
#起始位置,结束为止,命令
##start_pos,end_pos
#:第#行,例如2表示第2行
#,#:从左侧#表示起始行,到右侧#表示结尾行
eg:
2,3 //选中第2行到第4行
#,+#:从左侧#表示的起始行,加上右侧#表示的行数
eg:
2,+3 //选中第2行往后加3行
.:当前行
$:最后一行
eg:
.,$-1 //选中当前行到倒数第二行
%:全文,相当于1,$
eg:
20,25x
#正则表达式
/patern/:从当前行向下查找,一直找到第一个匹配patern的行结束
#,/patern/:从指定行开始,一直找到第一个匹配patern的行结束
/patern/,$:从指定行开始,一直找到第一个匹配pattern的行结束
/patern1/,/patern2/:从第一次被patern1模式匹配到的行开始,一直到第一次被patern2匹配到的行结束#
##command
d:剪切
y:复制
w file:将范围内的行另存至指定文件中
r file:在指定的位置插入指定文件中的所有内容
eg:
2,3d //选中2~3行,删除
4,6y //选中4~6行,复制
/^b/,/^f/d 以b开头到以f开头的行,删除
------------------------------------------------------------------
#查找
/PATTERN:从当前光标所在处向文件尾部查找
?PATTERN:从当前光标所在处向文件首部查找
n:浏览下一个
N:浏览上一个
eg:
:/boot
:/\/var 搜索/var
#查找与替换
[范围]s[/查找词][/替换词][/修饰符]
s:在扩展模式下完成查找替换操作:
格式:s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1,\2,...等向后引用符号;还可以使用“&”引用向前查找的整个内容,
修饰符:
i:忽略大小写
g:全局替换
gc:全局替换,每次替换前询问
查找替换中的分隔符号/可替换为其他字符
eg:
%s/\/sbin\/nologin/\/bin/bash/
//把/sbin/nologin替换成/bin/bash,但是这种写法看起来太奇怪了
//改成用#来做分隔符:%s#/sbin/nologin#/bin/bash#
s@/etc@/var@g
s#/boot#/#i
eg:
%s/var/usr/
%s/wang/&xiaochun等价于%s/wang/wangxiaochun
%s/(wang)/\1xiaochun
%s/\(.*cmd.*\)"/\1 xyz"/
%s@^[^#]@#&@ //把不是#开头的行,前面加#
%s@^#.*@@ //删除#开头的行
#撤销
u:撤销最近的更改
#u:撤销之前多次更改
U:撤销光标落在这行后所有此行的更改
ctrl+r:重做最后的撤销更改
.:重复前一个操作
n.重复前一个操作n次