20180618 Task 5.1 —— 5.7
618 Task
5.1 vim 介绍
5.2 vim 颜色显示和移动光标
5.3 vim 一般模式下移动光标
5.4 一般模式下复制剪切粘贴
5.5 进入编辑模式
5.6 vim 命令模式
5.7 vim 实践
5.1 vim 介绍
- 之前使用的 vi 和现在的 vim 一样的用法,
vim是vi的升级版本
vim是带有颜色显示的
安装 vim : yum install -y vim-enhanced
一般模式、编辑模式、命令模式
- vim 和 vi 的区别 1.1 vi 不带色 , vim 带色
- vim 分为三种模式: 2.1 一般模式, 在没进入编辑模式之前的模式, 可以删除, 复制, 剪切, 粘贴等 2.2 编辑模式, 对文档进行编辑 2.3 命令行模式, 在文档中搜索, 查找与替换; 包括 :wq 也属于命令模式
5.2 vim 颜色显示和移动光标
相同的文件在不同的路径下可能会不显示颜色, 不同的名称也会显示不同的颜色
文档中有语法等特殊用法时: shell,python 等
示例如下
不过有些文件在不同的路径下一样会有显示
1.1 对 /tmp/passwd 文件进行操作
## 模仿写一行 再复制篇尾的一行到篇首
[root@arron-01 ~]# vim /tmp/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
## 更改如下
[root@arron-01 ~]# vim /tmp/passwd
#jesus:x:1:3:arron:arron:/sbin/nologin
#chrony:x:998:996::/var/lib/chrony:/sbin/nologin
......
1.1.1 再次进入该文档, 发觉只有颜色显色
1.2 更改文档名称, 再查看文档的颜色
1.3 文档中的语法
1.4 综上, 文档在 vim 命令打开的情况下, 跟注释符, 文档中的特殊语法和文档的名称等有关系
- vim 的配置文件:
/etc/vimrc
, 可以在/etc/vimrc
中更改配置文件; 同时, 也可以在/root/.vimrc
文件中对高级的用法(自动缩进, 语法高亮等)进行写入, /root/.vimrc 默认是不存在的
[root@arron-01 ~]# vim /etc/vimrc
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set fileencodings=ucs-bom,utf-8,latin1
endif
.......
5.3 vim 一般模式下移动光标
- 一般模式下的命令 :
按键 | 作用 |
---|---|
h 或者向左的方向键 | 光标向左移动一个字符 (支持数字, nh) |
l (小写字母 l) 或者向右的方向键或空格键 | 光标向右移动一个字符**(支持数字, nl)** |
k 或者向上的方向键 | 光标向上移动一个字符 (支持数字, nk) |
j 或者向下的方向键 | 光标向下移动一个字符 (支持数字, nj) |
Ctrl + B (CTRL+Back) | 文本页面向前翻一页 |
Ctrl + F (CTRL+Front) | 文本页面向后翻一页 |
数字 0 或者 shift + 6 | 移动到本行行首, shift+6 移动到该行有字符串的行首, 0 移动到顶格的行首 |
Shift + 4 | 移动到本行行尾 |
gg | 移动到首行 |
G | 移动到尾行 |
nG (n 是任意数字) | 移动到第 n 行 |
P.S: vim 命令下文档右下角的标示
5.4 一般模式下复制剪切粘贴
- 一般模式下, 还可以实现字符或字符串的复制, 删除, 粘贴等操作
按键 | 作用 |
---|---|
x (小写 x) 和 X (大写 X) | x (小写 x ) 表示向后删除一个字符, X (大写 X ) 表示向前删除一个字符 |
nx | 向后删除 n 个字符 |
dd | 删除/剪切光标所在的那一行 |
ndd (n 为 number 的缩写) | 删除/剪切光标所在行的之后的 n 行 |
yy | 复制光标所在行 |
p (小写p) | 从光标所在行开始, 向下粘贴已经复制或者粘贴的内容 |
P (大写P) | 从光标所在行开始, 向上粘贴已经复制或者粘贴的内容 |
nyy | 从光标所在行开始, 向下复制 n 行 |
u | 还原上一步操作, 最多 50次, 而 CTRL+R 是退回上一次还原 |
v | 按 v 后移动光标会选中指定字符, 然后可以实现复制、粘贴等操作 |
- 之前说的 dd 实际上是剪切,
5.5 进入编辑模式
- 编辑模式是可以编辑文本文档的模式,
按键 | 作用 |
---|---|
i**(小写 i)** | 在当前光标下插入 |
I (大写 I) | 在当前光标的行首插入 |
o (小写 o) | 从光标所在行的下一行写入 |
O (大写 O) | 从光标所在行的上一行写入 |
a (小写 a) | 在光标的后一个字符写入 |
A (大写 A) | 在光标所在行的行尾写入 |
R (大写 R) | 在选中的字符出替换, 按下 R 后, 文档左下方会出现 -- REPLACE --, 按 ESC 退出 |
5.6 vim 命令模式
- 命令模式
命令 | 作用 |
---|---|
/word | 在光标之后查找一个字符串 word, 按 n 向后继续搜索 |
?word | 在光标之前查找一个字符串 word, 按 n 向前继续搜索 |
: n1,n2s/word1/word2/g | 在 n1 和 n2 行之间查找 word1 并替换为 word2, 不加 g |
则只替换每 一行的word1 | |
:1,$s/word1/word2/g | 将文档中所有的 word1替换为 word2, 不加 g 则只替换 |
每行的第一个 word1 | |
:w | 保存文本 |
:q | 退出 vim |
:w! | 强制保存, 在 root 用户下, 即使文本只读也可以完成保存 |
:q! | 强制退出, 所有改动不生效 |
:wq | 保存并退出, 会同时更改文件的 mtime 和 ctime (保存的那刻), atime 不变 |
:x | 保存并退出, 会更改文件的 atime (保存的那刻), mtime 和 ctime 不变 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:nohl | 不高亮 |
/etc/dnsmasq.conf
做试验, /keyword , 按键 n 向下查找关键字, N 向上查找关键字
[root@mail ~]# cp /etc/dnsmasq.conf /tmp/
[root@mail ~]# vim /tmp/dnsmasq.conf
## 输入 /dnsmasq , 按键 n 向下查找关键字, N 向上查找关键字
文档底部的标识
-
?keyword , 按键 n 向上查找关键字, N 向下查找关键字
-
:n1,n2s/word1/word2/g , 从 n1 行到 n2 行的 word1 替换为 word2, 不加 g 就只替换行的第一个 word1, 加 g 就替换行所有的 word1 ;
## 全篇文档全局替换
:1,$s/word1/word2/g
## 特殊情况, 替换字符/目标字符中有 /
:1,$s//etc/hosts/arronlinux.com/g vim 命令编辑器识别不了, 需要用到脱意符号 \ , 见如下, 在替换字符中在 / 前加上 \ , 但是有点乱
:1,$s/\/etc\/hosts/arronlinux.com/g
可以将字符连接符的 / 改为 # 或者 @, 见如下
:1,$s#/etc/hosts#arronlinux.com#g
- 在编辑模式下 , 输入
:
, 按向上的方向键, 可以调出之前输入的命令
5.7 vim 实践
1. vim实践操作
## part one
# cp /etc/dnsmasq.conf /tmp/1.txt
(1) 分别向下、向右、向左、向上移动6个字符(6j 6l 6h 6k)。
(2) 分别向下、向上翻两页(分别按两次ctrl+f和ctrl+b)。
(3) 把光标移动到第49行(49G)。
(4) 把光标移动到行尾,再移动到行首(Shift+4, Shift+6)。
(5) 移动到1.txt文件的最后一行(G)。
(6) 移动到文件的首行(gg)。
(7) 搜索文件中出现的“dnsmasq”,并数一下该字符串出现的次数(/dnsmsq 然后按n)。
(8) 把从第1行到第10行出现的dnsmasq替换成dns(:1,10s/dnsmasq/dns/g)。
(9) 还原上一步操作(u)。
(10) 把整个文件中所有的etc替换成cte(:1,$s/etc/cte/g)。
## part two
(11) 把光标移动到第25行,删除字符串 “ly”(25G 然后按l向右移动光标找到"ly",按v选中,然后按x)。
(12) 还原上一步操作(u)。
(13) 删除第50行(50G dd)。
(14) 还原上一步操作(u)。
(15) 删除第37-42行的所有内容(37G 6dd)。
(16) 还原上一步操作(u)。
(17) 复制第48行的内容并粘贴到第52行下面(48G yy 52G p)。
(18) 还原上一步操作(u)。
(19) 复制第37-42行的内容并粘贴到第44行上面(37G 6yy 44G P)。
## part three
(20) 还原上一步操作(按u)。
(21) 把第37-42行的内容移动到第19行下面(37G 6dd 19G p)。
(22) 还原上一步操作(按u)。
(23) 把光标移动到首行,把第1行内容改为“#!/bin/bash”(先按gg,把光标定位到第1行,然后按字母A,进入编辑模式,同时>光标到行末尾,进行修改操作,完成后按ESC)。
(24) 在第1行下面插入新的一行,并输入“# Hello!”(按o进入编辑模式,同时光标向下另起一行,输入“# Hello!”)。
(25) 保存文档并退出(按Esc键,输入“:wq”)。
如果实在不记得是否是文档最初的样子, ESC --> :e! 就可以了
- /etc/dnsmasq 只适用于 云(我用阿里云试了是 OK 的, 不知道其他云如何)
- part one
10) 把整个文件中所有的etc替换成cte
[root@mail ~]# vim /tmp/1.txt
## 输入如下字符串
:1,$s/etc/cte/g
## 显示如下
16 substitutions on 16 lines
- part two
11) 把光标移动到第25行,删除字符串 “ly”
## 输入如下内容
:25,25s/ly//g
## 显示如下
# which can trigger dial-on-demand links needless.
### 原句如下
# which can trigger dial-on-demand links needlessly.
13) 删除第50行
#no-poll ## 50th line
## 50G + D , 或者 50G + dd; 前者会删除光标处后边的字符, 如果是行首, 会删除整行, 后者不管光标在哪里整行都会删除
15) 删除第37-42行的所有内容
## 输入 37G后, 再 6dd
# servers it knows about and tries to favour servers to are known
# to be up. Uncommenting this forces dnsmasq to try each query
# with each server strictly in the order they appear in
# /etc/resolv.conf
#strict-order
17) 复制第48行的内容并粘贴到第52行下面
## 48G --> yy --> 52G --> P (大写 P) , 结果如下
48 # If you don't want dnsmasq to poll /etc/resolv.conf or other resolv
49 # files for changes and re-read them then uncomment this.
50 #no-poll
51
52 # If you don't want dnsmasq to poll /etc/resolv.conf or other resolv
53 # Add other name servers here, with domain specs if they are for
3. part three
21) 把第37-42行的内容移动到第19行下面
## 37G --> dd --> 19G -- > p
20 # servers it knows about and tries to favour servers to are known
21 # to be up. Uncommenting this forces dnsmasq to try each query
22 # with each server strictly in the order they appear in
23 # /etc/resolv.conf
24 #strict-order
25
23) 把光标移动到首行,把第1行内容改为“#!/bin/bash”
## gg --> D --> i --> 输入 #!/bin/bash
或者 :1,1s@.*@#!/bin/bash@g