十五、Shell-vi

king's blog
本节开始,我们来一起看看shell方面的知识,那什么是Shell?相信接触过linux的朋友都听说过shell,可理解为方便用户与操作系统的Kernel核心通信,而专门设置的一个前台窗口。只要用户通过shell发送指令,kernel则会接收到并反馈结果,比如我要查看系统有那些注册用户,可执行cat /etc/passwd命令,该节我们先来了解最基本的vi编辑器,主要内容如下:
一、文本模式
二、编辑模式
三、指令模式
四、区块选择
五、多文档编辑
六、多窗口编辑

一、文本模式

vi/vim通常有3中模式,文本模式、编辑模式、指令模式,每个模式下可用命令不尽相同。
那怎么知道现在是处于哪种模式呢,简单来说,通过vi file之后,默认显示的就是文本模式。那文本模式下,有哪些常用命令呢?

1、移动光标
1
2
3
4
5
6
k↑ 、j↓、h←、l→ ;nk or n↑表示向上移动n行
ctrl+f (follow) :屏幕向下移动一页、ctrl+b(back) :屏幕向上移动一页
$ or home:行尾
0 or end:行首
gg:文档开头
GG:文档结尾
2、搜索和替代
1
2
3
4
5
/word:向下搜索,按n继续向下搜索,按N向上搜索
?word:向上搜索,按n继续向上搜索,按N向下搜索
:n1,n2s/word1/word2/g,比如:1,5s/a/b/g ,将1~5行的a替换成b
:1,$s/word1/word2/g,比如:1,$s/a/b/g ,将全文的a替换成b
:1,$s/word1/word2/gc,比如:1,$s/a/b/gc ,将全文的a换成b,并给用户提示是否替换
3、删除和复制(常用):
1
2
3
4
5
6
7
dd:删除整行
ndd:删除n行
yy:复制整行
nyy:复制n行
p:粘贴
u:取消上一动作
ctrl+r:重复上一动作

二、编辑模式

通过vi file之后,默认显示的就是文本模式,按下字母i,则会切换到编辑模式,此时编辑框下方会出现”– INSERT –“的字样;按”Esc”,则切换会文本模式。那文本模式下,有哪些常用命令呢?

三、指令模式

当编辑完数据后,回到文本模式,我们可以对数据进行指令模式操作,如保存,显示行号等操作。
:w:保存,将数据写入文档
:wq:保存并退出,将数据写入文档
:wq!:保存并退出,将数据强制写入文档(有限制)
:set nu:显示行号
:set nonu:取消显示行号

四、区块选择

上述的命令基本都是按行进行操作,那我们可以按某个区域进行操作吗?当然可以的,按某个区域进行操作也就是先进入区块选择模式,再选择区块(Visual Block)后,再进行诸如复制粘贴等操作。常用命令如下:

1
2
3
4
5
v:在文本模式按v,此时编辑框下方会出现"-- VISUAL --"字样,此时可以移动光标按字符进行选择,选择的地方会反白显示;再按下v,则回到文本模式
V:在文本模式按v,此时编辑框下方会出现"-- VISUAL LINE --"字样,此时可以移动光标按行进行选择,选择的地方会反白显示;再按下V,则回到文本模式
ctrl+v:在文本模式按ctrl+v,此时编辑框下方会出现"-- VISUAL BLOCK --"字样,此时可以移动光标进行区块选择,选择的地方会反白
y:复制,复制反白部分
p:粘贴,粘贴反白部分

五、多文档编辑

通过vi打开多个文件,然后在文本模式输入如下指令
输入:files,可以查看vi同时打开几个文档
输入:n,可以查看后一个文档的内容
输入:N,可以查看前一个文档的内容

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#1.同时打开3个文件后,默认显示第一个文件内容,并处于文本模式
weblogic@ETS157:/opt/project/test> vi first.txt second.txt third
3 files to edit
first

~
"first.txt" 1L, 6C  

#2.输入:files命令,显示现在同时打开了那几个文件
:files <------------------------------------------输入
  1 %a   "first.txt"                    line 1 -->3行,显示那几个文件被打开,%a 表示正在编辑的文档
  2      "second.txt"                   line 0
  3      "third"                        line 0
   
#3.输入:n,显示后一个文件(second)的内容
:n     <------------------------------------------输入
second
~

"second.txt" 1L, 7C  
   
#4.输入:N,显示前一个文件(first)的内容
:N     <------------------------------------------输入
first
~

"first.txt" 1L, 6C

六、多窗口编辑

可以在一个窗口同时编辑几个文件吗?也是可以的,当然这种场景比较少,比如在编辑一个文档的过程中,临时要编辑另一个文件,怎么做呢,举个例子:
Step1: vi a.sh
vi

Step2: 在文本模式输入:sp b.sh,表示要编辑同级目录下的b.sh文件
vi

Step3:此时b.sh的内容将会置顶
vi

step4: 在文本模式,按下ctrl+w,然后按↑ or ↓可以切换到另一个文档,进行编辑,此时对a.sh进行编辑
vi

Tags:
文 / 甲乙丙丁
LEAVE A REPLY

loading