vi操作

vim是从vi发展过来的一款文本编辑器

1
vi a.txt

前提安装了vim软件

工作模式:

​ 命令模式:-- 打开文件之后,默认就是命令模式(ESC键)
​ 编辑模式:–需要输入一些命令,切换到编辑模式(iaos,IAOS),按esc键回到命令模式
​ 末行模式:-- 在末行模式可以输入一些命令( : 键 ) 按两次esc键切回命令模式
编辑模式不能直接切回到末行模式,需要先切换到命令模式,然后再切回到末行模式

命令模式下的操作:

光标移动:

1
2
3
4
5
6
7
8
H	 J	  K   L
前 下 上 后

行首:0
行尾:$
文件开始位置:gg
文件末尾:G
行跳转:300gg

删除操作:

1
2
3
4
5
6
7
删除光标后边的字符:x
删除光标前的字符:X
删除单词:dw(光标移动到单词开始位置,否则只能删除一部分)
删除光标到行首的字符串:d0
删除光标到行尾字符串:D(d$)
删除光标当前行:dd
删除光标多行:ndd(n--自然数)

撤销操作:

1
2
撤销:u
反撤销:ctrl+r

复制粘贴:

1
2
3
4
5
6
7
8
9
10
11
复制:yy
复制多行:nyy


粘贴:p(光标所在行的下一行)
粘贴:P(大写,光标所在行)


在vim中剪切等于删除
剪切:dd(剪切一行)
剪切多行:ndd(n--自然数)

可视模式:

1
2
3
4
5
6
7
切换到可视模式:v

选择内容:h j k l

复制:y 删除当前行:d

粘贴:小写p(粘贴到光标下一个字符)或大写P(粘贴到光标上一个字符)

查找和替换操作:

1
2
3
4
5
/查找内容    往下找
?查找内容 往上找

把光标移动到查找的单词上,按#
遍历快捷键:n或N,往下找n是下一个,N是是一个,往上找n是上一个,N是下一个,取决于查找方向
1
r:替换当前字符 按下r之后输入一个字符,只能替换一个字符

缩进:

1
2
向右:>>
向左:<<

查看帮助文档,首先光标移动到关键字或函数那里,然后按下数字,例如3,在按shitf+k

文本模式下的操作:

切换到文本模式:

1
2
3
4
5
6
7
8
9
10
11
a -- 在光标所在位置的后边插入
A -- 在当前行的尾部插入

i -- 在光标所在位置的前边插入
I -- 在光标所在行的行首插入

o -- 在光标所在行的下边开辟一个新的行
O -- 在光标所在行的上边开辟一个新的行

s -- 删除光标后边的字符,然后插入
S -- 删除光标所在行,然后插入

末行模式下的操作:

输入linux命令

1
:!命令

替换:

先查找,然后光标移动到要替换的行

1
2
3
4
5
6
:s/tom/jack 	代表用jack替换当前行的第一个tom
s/tom/jack/g 代表用jack替换当前行的所有tom
:%s/tom/jack 代表用jack替换当前文本所有行的第一个tom
:%s/tom/jack/g 代表用jack替换当前文本的所有tom
:20,25s/tom/jack/g 代表用jack替换20行到25行的tom
:20,25s/tom/jack/ 代表用jack替换20行到25行的第一个tom

保存退出:

1
2
3
4
5
:q		退出
:q! 退出不保存
:w 保存
:wq 保存退出
:x 保存退出

命令模式下的保存退出

1
ZZ

命令模式分屏操作:

1
2
3
4
5
6
7
8
9
:sp 	将屏幕分成两部分 水平
:vsp 将屏幕分成两部分 垂直
:sp或vsp +文件名,水平或垂直拆分窗口显示两个不同的文件

:wqall保存并退出所有屏幕
:wall 保存所有
:wq保存并退出光标所在的屏幕
:q 退出当前屏幕
ctrl+ww 切换屏幕

vim打造IDE
系统级配置文件目录:/etc/vim/vimrc
用户级配置文件目录:~/.vim/vimrc

~/.vimrc

1
2
3
4
5
6
7
8
9
10
11
12
set number
set ts=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent
inoremap ( ()<ESC>ha
inoremap { {}<ESC>ha
inoremap [ []<ESC>ha
inoremap ' ''<ESC>ha
inoremap " ""<ESC>ha
imap { {<CR>}<ESC>O

ts 是tabstop的缩写,设TAB宽度为4个空格。
softtabstop 表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用 expandtab 时特别有用。
shiftwidth 表示每一级缩进的长度,一般设置成跟 softtabstop 一样。
expandtab表示缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进。
autoindent自动缩进