一. vim基本概述
1. 什么是vim?
vi和vim是Linux下的一個文本編輯工具。(可以理解為windows的記事本,或word文檔)
2. 為什么要使用vim?
因為Linux系統一切皆為文件,而我們工作最多的就是修改某個服務的配置(其實就是修改文件內容)。
也就是說如果沒有vi/vim,我們很多工作都無法完成。
提示: vim是學習linux最重要的命令之一
3. VI與vim有什么區別?
vi和vim都是文本編輯器,只不過vim是vi的增強版,比vi多了語法高亮顯示,其他編輯功能幾乎無差,所以使用vi還是vim取決個人習慣。(相當於windows系統下的文本編輯軟件“記事本”與”notepad++”的區別)
PS:因為前期最小化安裝CentOS系統,所以默認情況下沒有vim命令,但可以使用yum install vim -y
安裝
4. 如何使用vim編輯器?
在使用vim之前,我們需要先介紹下vim的三種模式: 普通模式、編輯模式、命令模式,每種模式分別支持多種不同的快捷鍵,要想高效率地操作文本,就必須先搞清這三種模式的操作區別以及模式之間的切換方法。
5. vim模式三種模式介紹
普通模式: 主要是控制光標移動,可對文本進行復制、粘貼、刪除等工作。
使用vim filename 編輯一個文件時,一進入該文件就是普通模式了。
在這個模式下,可以進行光標移動、復制、刪除、粘貼操作。
編輯模式: 主要進行文本內容編輯和修改
從普通模式進入編輯模式,只需你按一個鍵即可(i, I, a, A, o, O)
當進入編輯模式時,會在屏幕的最下一行會出現 “INSERT”標記
從編輯模式回到普通模式只需要按鍵盤左上方的 ESC 鍵即可。
命令行模式: 主要用於保存或退出文本。
在普通模式下,輸入 “:” 或者 “/“ 即可進入命令模式。
在命令該模式下,可進行的操作有,顯示行號、搜索、替換、保存、退出。
小結: vim編輯打開文件整體流程如下:
默認打開文件處於普通模式
從普通模式切換至編輯模式需要使用a、i、o
編輯模式修改完畢后需要先使用ECS返回普通模式
在普通模式輸入”:”或”/“進入命令模式,可實現文件的保存與退出。
PS: 在vim中,無法直接從編輯模式切換到命令模式。
二. vim模式使用
1. 普通模式
# 1.命令光標跳轉
G # 光標跳轉至末端
gg # 光標跳轉至頂端
Ngg # 光標跳轉至當前文件內的N行
$ # 光標跳轉至當前光標所在行的尾部
^或者0 # 光標跳轉至當前光標所在行的首部
# 2.文件內容較多
ctrl+f # 往下翻頁(行比較多)
ctrl+b # 往上翻頁
# 3.復制與粘貼
yy # 復制當前光標所在的行
5yy # 復制當前光標以及光標向下4行
p(小寫) # 粘貼至當前光標下一行
P(大寫) # 粘貼至當前光標上一行
# 4.刪除、剪貼、撤銷
dd # 刪除當前光標所在的行
4dd # 刪除當前光標所在的行以及往下的3行
dG # 刪除當前光標以后的所有行
D # 刪除當前光標及光標以后的內容
x # 刪除當前光標標記往后的字符
X # 刪除當前光標標記往前的字符
dd & p # 剪貼、先刪除dd(number dd),后粘貼p
u # 撤銷(Undo)上一次的操作
# 5.替換 Replace
r # 替換當前光標標記的單個字符
R # 進入 REPLACE 模式, 連續替換,ESC結束
2. 編輯模式(從普通模式進入到編輯模式)
i # 進入編輯模式,光標不做任何操作
a # 進入編輯模式,將當前光標往后一位
o # 進入編輯模式,並在當前光標下添加一行空白內容
I # 進入編輯模式,並且光標會跳轉至本行的頭部
A # 進入編輯模式,將光標移動至本行的尾部
O # 進入編輯模式,並在當前光標上添加一行空白內容
3. 命令模式,主要用於搜索, 保存, 退出文件。
# 1.文件保存與退出
:w 保存當前狀態
:w! 強制保存當前狀態
:q 退出當前文檔(文檔必須保存才能退出)
:q! 強制退出文檔不會修改當前內容
:wq 先保存,在退出
:wq! 強制保存並退出
:x 先保存,在退出
ZZ 保存退出, shfit+zz
:number 跳轉至對應的行號
:set nu 顯示行號
:set nonu 不顯示行號
# 2.文件內容查找
/string # 需要搜索的內容(查找)
:/string # 需要搜索的內容(查找)
n # 按搜索到的內容依次往下進行查找
N # 按搜索到的內容依次往上進行查找
# 3.文件內容替換
:1,5s#sbin#test#g # 替換1-5行中包含sbin的內容為test
:1,5s#sbin#test# # 只替換1-5行中第一個包含sbin的內容為test
:%s#sbin#test#g # 替換整個文本文件中包含sbin的替換為test
:%s#sbin#test#gc # 替換內容時時提示是否需要替換
# 4.文件內容另存
:w /root/test.txt # 將所有內容另存為/root/test.txt文件中
# 5.文件內容讀入
:r /etc/hosts # 讀入/etc/hosts文件至當前光標下面
:5r /etc/hosts # 指定插入/etc/hosts文件至當前文件的第五行下面
4. 視圖模式(從普通模式進入視圖模式),主要進行批量操作
ctrl+v 進入可視塊模式,選中需要注釋的行
1.插入:按shift+i進入編輯模式,輸入#,結束按ESC鍵
2.刪除:選中內容后,按x或者d鍵刪除
3.替換:選中需要替換的內容, 按下r鍵,然后輸入替換后的內容
shift+v 進入可視行模式,選中整行內容
1.復制:選中行內容后按y鍵及可復制。
2.刪除:選中行內容后按d鍵刪除。
三. vim擴展知識
1. 環境變量臨時生效
:set nu # 顯示行號
:set ic # 忽略大小寫, 在搜索的時候有用
:set ai # 自動縮進
:set list # 顯示制表符(空行、tab鍵)
:set no[nu|ic|ai…] # 取消臨時設定的變量
2. 環境變量永久生效。~/.vimrc 個人環境變量(優先級高) /etc/vimrc 全局環境變量
# vim ~/.vimrc # 當下次再打開文件自動顯示行號並忽略大小寫
set nu
set ic
# 如果個人vim環境沒有配置, 則使用全局vim環境變量配置。
# 如果個人vim環境和全局環境變量產生沖突, 優先使用個人vim環境變量。
3. 如何同時編輯多個文件
vim -o file1 file2 # 水平分割
vim -O file1 file2 # 垂直分割
# ctrl+ww 文件間切換
4. 相同文件之間差異對比,通常用於對比修改前后差異
diff # 文件對比
vimdiff # 以vim方式打開兩個文件對比,高亮顯示不同的內容
5. 如果vim非正常退出 (ctrl+z)掛起或強制退出終端沒關閉vim后
# 假設打開filename文件被以外關閉,需要刪除同文件名的.swp文件即可解決
rm -f .filename.swp
四. vim練習示例
1. 基本練習
1.將/etc/passwd 復制到/var/tmp/目錄下,並重命名為test.txt
[root@yang tmp]# cp -p /etc/passwd /var/tmp/
[root@yang tmp]# ls
passwd
[root@yang tmp]# mv passwd test.txt
[root@yang tmp]# ls
test.txt
2.用vim打開test.txt並顯示行號
[root@yang tmp]# vim test.txt
:set nu
3.分別向下、向右、向左、向右移動5個字符,分別向下、向上翻兩頁
[root@yang tmp]# vim test.txt
# 向下、向上翻兩頁
ctrl + f
ctrl + b
4.把光標移動到第10行,讓光標移動到行末,再移動到行首,移動到test.txt文件的最后一行,移動到文件的首行
[root@yang tmp]# vim test.txt
:10
$
^ 或者 0
G
gg
5.搜索文件中出現的 root 並數一下一共出現多少個,不區分大小寫搜索
[root@yang tmp]# vim test.txt
/root
ESC
:q
[root@yang tmp]# cat test.txt | grep root | wc -w
[root@yang tmp]# vim test.txt
:set ic
6.把從第一行到第三行出現的root 替換成–od–,然后還原上一步操作
[root@yang tmp]# vim test.txt
:1,3s#root#-od-#g
u
8.把整個文件中所有的root替換成–od–
[root@yang tmp]# vim test.txt
:%s#root#-od-#g
9.把光標移動到20行,刪除本行,還原上一步操作
[root@yang tmp]# vim test.txt
:20
dd
u
10.刪除第19行,還原上一步操作
[root@yang tmp]# vim test.txt
19gg
dd
u
11.刪除從5行到10行的所有內容,還原上一步操作
[root@yang tmp]# vim test.txt
5gg
5dd
u
12.復制2行並粘貼到11行下面,還原上一步操作(按兩次u)
[root@yang tmp]# vim test.txt
1gg
2yy
11gg
p
u
u
13.復制從11行到15行的內容並粘貼到8行上面,還原上一步操作(按兩次u)
[root@yang tmp]# vim test.txt
11gg
5yy
8gg
P
u
u
14.把13行到18行的內容移動文件的尾部,還原上一步操作(按兩次u)
[root@yang tmp]# vim test.txt
13gg
5dd
G
p
u
u
15.光標移動到第2行,把/sbin/nologin改成/bin/bash
[root@yang tmp]# vim test.txt
2gg
0
i
改
ESC
16.在第一行下面插入新的一行,並輸入”# Hello!”
[root@yang tmp]# vim test.txt
1gg
o
寫: # Hello!
ESC
17.保存文檔並退出
:wq
2. 練習文件
[root@yang ~]# cd /var/tmp/
[root@yang tmp]# vim proxy.conf
i
server {
Listen 8080;
Server_Name vim.OldboyEDU.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forward-for;
proxy_intercept_errors on;
proxy_next_upstream error timeout;
proxy_next_upstream_timeout 3s;
proxy_next_upstream_tries 2;
error_page 500 502 403 404 = /proxy_error.html;
}
location = /proxy_error.html {
root /code/proxy;
}
}
:wq
1.使用vim打開proxy.conf文件
[root@yang tmp]# vim proxy.conf
2.修改Listen為listen小寫,並將8080修改為80
14gg
r
L
2gg
$
X
X
3.修改ServerName為server_name小寫。
3gg
r
s
4.修改vim.OldboyEDU.com為vim.oldboy.com
/vim找到操作即可
5.在server_name行下插入一行 root /code;
/server_name
o
root/code
ESC
5.復制5-14行的內容,然后將其粘貼到14行下面
5gg
10yy
14gg
p
6.刪除與proxy_set_header相關的兩行全部刪除
/proxy_set_header
2dd
n
2dd
7.如上操作完成后,在13-20行前面加上#號
:13,20s/^/#/g
8.刪除21-23的行,然后保存當前文件
21gg
3dd
:wq