摘要:
vi从安装到使用
vi从菜鸟到高手
0、 vim - Vi IMproved, a programmers text editor
分为 VI和VIM,现在流行的发行版里面VI=VIM
是一个文本编辑器(所有没有图片的文本,纯文本内容,无视后缀名)
不能编辑二进制文件
不能编辑目录
Debian系安装vim的时候:
apt install vim
1、目前整个地球上只有一个地方不默认安装vi
Docker 镜像Images 的容器
2、查看VI版本
在命令行:"vi --version"
在文本里面:":version"
3、使用步骤
1.vi filename
vi 后面加文件名 //若存在,则直接打开编辑,若 不存在,则新建一个文件
2.进入插入模式
键入 "i" 键,建议按i键
也可键入 "s"键,但是s键是删除当前光标的字符后,再进入插入模式
3. 插入数据
4. 敲 "Esc"键,或者键入组合键 "^[" (Ctrl-[)进入命令模式
小诀窍:按组合键的时候,一定要先按前面的辅助键不放,然后再按功能键
5. 输入 ":" ,然后键入 "x/wq/w/q!/q/qa/qa!"
命令 |
说明 |
状态 |
x |
保存并退出 |
|
wq |
保存并退出 |
|
w |
保存 |
written |
q! |
强制退出并不保存 |
|
qa! |
等价于q! |
|
q |
退出 |
|
qa |
等价于q |
快捷退出:
^w q // Ctrl+w q
等价于 :q
4、状态行
当前编辑窗口的最后一行被称为状态行
用于显示文件名
显示行、列
显示字符的个数
5、三种模式
插入模式
i |
进入插入模式 |
命令模式
^[ 或 Esc |
进入命令模式 |
末行模式
: |
进入末行模式 |
插入模式
i |
在当前位置插入数据 |
a |
光标位置后面插入数据 |
A |
本行行尾插入数据 |
o |
光标所在行的下一行插入数据 |
O |
光标所在行的上一行插入数据 |
s |
删除光标所在位置字符并在光标后插入数据 |
S |
删除光标所在行并在行首插入数据 |
cw |
删除当前光标所在单词并进入插入模式 |
6、在文件中移动光标
上下左右
h |
← |
l |
→ |
j |
↓ |
k |
↑ |
行首行尾
^ |
行首,非空字符位置,不包含空格 |
0 |
行首,空字符处,包含空格 |
$ |
行尾,空字符处,包含空格 |
g_ |
行尾,非空字符位置,不包含空格 |
文首文尾
gg |
文首 |
G(shift+g) |
文末 |
屏幕头部中间底部
H(shift+h) |
顶行 |
M(shift+m) |
中间行 |
L(shift+l) |
底行 |
翻屏
^f |
往下翻一屏 |
^b |
忘上翻一屏 |
撤销
u |
撤销一次操作 |
1 change; before #19 22 seconds ago |
^r |
反撤销一次操作 |
1 change; after #19 33 seconds ago |
删除
x |
删除光标所在处的一个字符 |
dw |
删除光标所在处的一个单词 |
D(shift+d) |
删除光标所在处后面所有的字符 |
dd |
删除当前行 |
Ndd |
删除N行 |
dw |
删除一个单词 |
复制粘贴
yy |
复制一行 |
p |
粘贴 |
v-w-y |
复制一个单词 |
v-y |
复制一个字符 |
7、查找一个字符串
键入 "/" 进入查找模式,然后在后面键入需要查找的字符串
n |
跳到下一个字符串 |
N |
跳到上一个字符串 |
8、替换
:s/old/new |
在一行内将第一个old替换为new |
:s/old/new/g |
在一行内将所有old替换为new |
:s/old/new/gc |
在一行内将所有old替换为new时每个都确认一下 |
:%s/old/new/g |
在文件内将所有old替换为new |
:%s/old/new/gc |
在文件内将所有old替换为new时每个都确认一下 |
小诀窍:在":"模式的时,键入 "^p/^n"或"↑/↓"选择已经执行过的命令
9、简单设置
在 ":"模式使用
行号 |
set nu(number) set nonu |
只读 |
set readonly |
缩进 |
set paste |
10、使用分级
等级 |
生命周期 |
要求 |
备注 |
第一级 |
能吃饭 |
安装 启动 看文档 知道进入之后的常用操作 上下左右 删除 复制 粘贴 插入 退出 |
|
第二级 |
有肉吃 |
各种插入你都会 移动光标满天飞 复制粘贴擒拿手 取消操作你不行 出入*红牌楼 |
|
第三级 |
吃香喝辣 |
更好 各种重复 更强 各种跳 更快 到处飞 |
|
第四级 |
有人买单 |
成神 |
11、扩展
1.自动提示
^p |
调出自动提示窗口,向上一行一行操作 |
^n |
调出自动提示窗口,向下一行一行操作 |
^m |
确认 |
2.块操作
^v |
进入块操作 |
使用块操作在所有行前面加上 ##
^v
-> shift-i
-> ##
-> ^[
3.可视化选择
v |
进入可视化选择 |
V |
选择一行 |
4.缩进
< |
左缩进 |
> |
右缩进 |
5.分屏
^w s / :sp |
分横屏 |
^w v / :vs |
分竖屏 |
^w q |
退出 |
^w hjkl |
屏之间切换 |
6.创建新文件
通过vi的命令模式,在当前打开的文件里面,使用":"命令之后,
键入 :new file_name 然后即可在当前窗口新创建一个分屏的file_name文件窗口
此时你可以通过 ^w jklm进行上下切换,也可以*地在多个文件中进行复制粘贴
7.其它高级小诀窍
1、对没有权限的文件修改的保存(使用": w !sudo tee %" ):
your@your:/etc/apt$ vi 1111
插入数据之后,键入命令模式i(":")
操作:
": w !sudo tee %"
-> 按 "O" 或 "L" 均可
:r !uname -a // 插入执行命令之后显示的内容到本文本
:w !sudo tee %
//提权并保存编辑好来的文档
执行过程:
Linux your 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
W13: Warning: File "11111" has been created after editing started
[O]K, (L)oad File:
:w !sudo tee %
Linux your 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
W13: Warning: File "11111" has been created after editing started
Press ENTER or type command to continue
your@your:/etc/apt$ cat 11111
Linux your 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
your@your:/etc/apt$
2、锁屏模式编辑vi
^s |
锁屏,终止屏幕终端回显 |
^q |
恢复正常模式 |
注意:如果键盘熟悉度不高,也就是说打字速度低于150,或者错误率高于1%,建议不要触碰此等高度危险操作,不然后果自负
3、其它补充:
1、vi 配置文件和搜索模式时的高亮显示小结:
配置文件:
your@your:~$ cd
your@your:~$ ll .vimrc
-rw-rw-r-- 1 your your 31 Aug 7 04:13 .vimrc
.file_name |
"." 在linux里面代表隐藏文件 |
通过 ls -a 可以查看隐藏文件
-a, --all
do not ignore entries starting with .
更改vi显示,可以有两种模式:
临时 |
在文件内 |
永久 |
在.vimrc配置文件内 |
键入符合vi的语法
搜索模式的高亮显示:
永久:
1、vi .vimrc
2、set hlsearch
临时:
1、vi file_name
2、: set hlsearch
永久:
1、vi .vimrc
2、删除 set hlsearch 或者注释
说明:.vimrc的配置文件里面," 双引号代表注释
一个语法高亮和开启行号显示、搜索高亮显示的demo:
2、vi搜索模式前后说明:
/ |
向后搜索 |
n:下一个 N:上一个 |
? |
向前搜索 |
n:上一个 N:下一个 |
向前 <----"N"---- "?"--"n"--- souce ----"N"---"/" -----"n"---> 向后
3、在vi、mysql中执行linux命令:
环境 |
方法 |
说明 |
vi |
:! linux_command |
新创建有窗口执行命令 |
mysql |
\! linux_command 或 system linux_command |
在当前mysql交互界面执行命令 注意:\! 与命令之间有空格,否则会出现: mysql> \!pwd ERROR: Usage: \! shell-command mysql> \! pwd; /home/huhua mysql> |
system (\!) Execute a system shell command.
4、高级功能:使用SSH服务登陆远程主机:
mysql |
system ssh core@192.168.28.144 |
vi |
! ssh core@192.168.28.144 |
5、vi 插入":"模式执行命令的输出到vi当前文本里面
:r !linux_command
包括ping都可以导入到文本里面,只是ping的输出不明文显示