vim編輯器
vi 是一種文本編輯器,所謂文本數據是基于字符編碼的文件,常見的編碼有ASCII編碼,
UNICODE編碼等
文本編輯種類分為:
行編輯器:所謂航編輯器就是至一行一行來編輯處理的工具,比如sed
全屏編輯器:編輯空間占據整個屏幕,比如 nano ,vi
vim 就相當于vi的增強版,vim是模式化的編輯
vim
在工作過程中有三種模式:
1命令模式(默認狀態)也叫做編輯模式 :可以進行移動光標,
剪切/粘貼復制文本內容
2輸入模式(插入編輯)在文本文件當中進行輸入內容;
3擴展命令模式(末行模式) vim內置的命令行接口 ,執行vim 的內置命令 ;
輸入
保存退出等命令
Esc 鍵 退出當前所在模式,可以從輸入模式轉換到編輯模式
vim 的使用:
vim [選項] file
+# 打開文件后,直接讓光標處于第#行的行首
例如 ~]# vim +5 f1 命令 打開進入編輯模式光標處于第5行的行首
+/pattern (正則表達式)
打開文件后,直接讓光標處于第一個被pattern匹配到的行的行首
例如 ~]# vim +/root f 匹配第一個root匹配到的字符的行的行首
vim + file 直接打開file,光標在最后一行
例如 ~]# vim + f1
vim -b file 二進制方式打開文件
,處理二進制文本的時候用,
例如 ~]# vim -b /bin/cat 后面跟的是二進制程序
vim -d
file1 file2 比較多個文件
例如 ~]# vim -d f1 f2 比較兩個文件內容,不一樣的地方會顯示出來
vim -m file 只讀方式打開文件
例如 ~]# vim -m f1
如果對此文本進行修改保存,會提示不能用,打開方式為只讀
vim -e file 或者使用ex file
直接進入ex模式 擴展命令模式(ex) 這是文本命令執行模式
在命令終端 切換到此模式
注:如果該file存在,file被打開并顯示其中內容; 如果該file不存在,
當編輯后第一次存盤時創建該file
模式轉換:
1,ESC鍵可以從插入編輯模式到命令模式
2, 從命令模式到 插入編輯 可以使用以下命令
i :
insert,在光標所在處進行輸入內容編輯
I :在當前所在光標所在行的行首輸入內容編輯
a :
append,在光標所在的字符后面輸入內容編輯
A : 在當前光標所在行的行尾輸入內容編輯
o : 在當前光標所在行的下方打開一個新行輸入內容編輯
O
:在當錢光標所在行的上方打開一個新行輸入內容編輯
3,插入編輯模式 > 到命令模式 可以使用ESC
4 命令模式 > 擴展模式(末行模式) 直接輸入冒號: 即可在窗口的最下方顯示冒號,文本內的命令行
5 擴展模式 >
命令模式 ESC
6 插入編輯模式 > 命令模式 > 擴展模式 插入模式不能直接轉換到擴展模式
鎖定和解鎖:
Ctrl+s 鎖定編輯界面不能進行其它操作不能ESC,輸出界面不給任何反應
Ctrl+q 解鎖編輯界面可以看到鎖定時,對鍵盤輸入的某些字符
關閉和退出文本:
擴展模式:(末行模式)
按‘:’進如文本內的命令行擴展模式;處于底部的屏幕最左側
:q 退出
:q!
強制退出 不存盤退出,即使更改都將丟失
:wq 保存退出
寫入內容并保存退出
:wq! 強制保存退出
:x
保存退出
:w 寫(存)磁盤文件 w /root f2
可以將文件內容寫入另一個文件中
:r 可以讀取別的文件到當前光標所在處 例如 在擴展模式下操作 :r
/etc/issue
:! command 可以不用退出當前處理的文本,可進行別的命令操作 例如
:!ifconfig 查看過后按回車又回到當前處理的文本中,非常方便快捷
:r! command
可以使用r!將命令執行結果讀取到正在處理的文本當中 例如 :r!ifconfig 將執行結果,讀取添加到當前文本所在光標的下面
命令模式:
保存退出的快捷鍵:
ZZ
保存退出
ZQ 不保存退出
命令模式光標跳轉:
字符之間移動跳轉:
h 左 ←
l 右 →
j 下 ↓
k 上 ↑
#h,l,j,k #代表數字
還可以自定義指定跳轉指定的個數的行;比如我想從當前光標往右移動10個
用鍵盤輸入10l
注意,這時候的輸入是不顯示出來了,把字符輸入成功后觀察光標是否移動,其它的我就不舉例了
單詞之間移動跳轉:
w 下一個單詞的詞首
e
當前或下一個單詞的詞尾
b 當前或前一個單詞的詞首
#w,e,b
#代表數字
單詞之間也支持自定義跳轉移動;比如我想從當前所在光標跳轉到距離有10個單詞的詞首。用鍵盤輸入10w
此時光標就會移動到此
當前頁面跳轉:
H
頁首
M 頁中間的行
L 頁底
行首行尾跳轉:
^ 跳轉至行首的第一個非空白字符
0
跳轉至絕對行首 包括空白符
$ 跳轉至絕對行尾
行之間移動跳轉:
G 最后一行
#G #為數字比如我輸入10#
這時候光標會在文本的第10行處; 在擴展模式下可以:10 這樣也行,一個概念
1G
跳轉光標到第一行所在 ,跟小寫gg 一樣使用
句子間移動:
( 上一句
) 下一句
段落之間移動:
{ 上一段
} 下一段
翻屏操作快捷鍵:
Ctrl+f 向文件尾部翻一屏
Ctrl+b 向文件首部翻一屏
Ctrl+d 向文件尾部翻半屏
Ctrl+u 向文件首部翻半屏
命令模式操作:
字符編輯:
x
刪除所在光標處的字符
#x 刪除所在光標起始的#個字符
#表示數字
xp 交換光標所在處的字符以及其后面字符的位置
~
轉換大小寫內容
替換命令:
r 替換光標所在處的字符 比如按下r鍵后輸入數字5
原先的內容就會被替換掉
R 切換到替換的模式 可以直接輸入內容將原先的內容給替換掉
刪除命令:
d 刪除命令,可結合光標跳轉字符,實現范圍刪除
d$
刪除到行尾
d^ 刪除到非空行首
d0
刪除到行首
dw 刪除下一個單詞的詞首
de 刪除當前或下一個單詞的詞尾
db
刪除當前或前一個單詞的詞首
#command #代表數字 使用舉例 10dw 10de
….
dd 刪除當前光標所在行
#dd 多行刪除 例如
10dd
D 從當前光標位置一直刪除到行尾,會留下空行,同等與d$一樣的概念
復制命令:
y 復制,整行的復制 ,可以結合光標跳轉字符使用,復制跳轉范圍內的字符
y$ 復制當前所在光標處之后的行內容
y0
復制當前所在光標處之前到非空白行首的內容
y^
復制當前所在光標處之間到行首的內容不包括空白行
ye
復制當前所在光標處在詞首的位置,復制其整個單詞;如果光標處在詞尾,則復制下一個單詞的內容
yw
復制當前所在光標處以詞首開頭的位置復制整個單詞內容;如果光標在詞尾,則復制單詞尾的單個字符內容
yb
復制當前所在光標之前的單詞
yy 復制行內容
#yy #為數字 可以復制多行
例如10yy 復制10行內容,可以配合 上面的命令進行操作
粘貼命令:
p
緩沖區存的如果為整行,則粘貼當前光標所在行的下方;否則,則粘貼至當前光標所在處的后面
p
緩沖區存的如果為整行,則粘貼當前光標所在行的上方;否則,則粘貼至當前光標所在處的前面
修改命令:
c 修改后切換到插入模式進行修改
c$
c^
c0
cb
ce
cw
#command
#為數字,例如 10cb 10ce
cc 刪除當前行并輸入新內容
#cc
#為數字, 刪出當前光標所在處一下的行, 比如刪除當前光標之下的10行 就輸入10cc
C
刪除當前光標到行尾,并且換成插入模式
命令模式撤銷更改:
u
撤銷最近的的更改,在此之前的操作
#u 撤銷之間多級的更改 #為數字
U
撤銷光標落在這行后所有此行的更改
. 重復前一個操作
n.
重復前一個操作n次
Cert+r 重做最后一次撤銷的更改
擴展模式地址定界:
# 表示第幾行,例如5表示第5行
#,#
表示從左側#表示行起始,到右側#表示行結尾 例如 從第1,5行,直接跳轉到第1行和第5行
#+# 從左側#表示的行起始,加上右側#表示的行數 兩個數字相加 ,例如5+5行
. 當前行
$ 最后一行 還可以 $-5
表示當前行到倒數第5行
% 全文,相當于1,$
/pat1/,/pat2/ 從第一次唄pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結束
#,/pat/ 從第#行開始到第一次匹配到第一次匹配到pat為止 例如3,/^r/ 第三行開頭為r的字符
/pat/,$ 從第一次匹配到pat到最后一行
使用方式:后面可以跟一個編輯命令 比如,c,d,y
c進行修改,d進行刪除,y進行復制 可以直接附加在地址范圍后使用
w /dir/file
將范圍內的行另存至指定文件中去
r file 在指定位置插入指定文件中的所有內容
擴展模式查找:
/pat 從當前光標所在出向文件尾部查找
?pat
從當前光標所在出向文件首部查找
n 與命令同方向查找
N
與命令反方向查找
擴展模式查找并且替換:
s 在擴展模式下完成查找替換操作
格式為:
s/要查找的內容/替換為的內容/修飾符
要查找的內容:可使用增則表達式,
替換為的內容:不能使用模式,僅能使用分組引用比如\1,\2..等后向引用符號,還可以使用&引用前面查找時查找到的整個內容
修飾符:
i 忽略大小寫
g
全局替換;默認情況下,每一行只替換第一次出現的內容
gc 全局替換,每次替換前詢問
查找替換中的分隔符/可替換為其他的字符 例如 s@@@gi #s###gi 等
練習
1 復制/etc/profile 至
/tmp/目錄,用查找替換命令刪除/tmp/profile文件中的行首的空白字符
~]# cp /etc/profile
/tmp/ vim /tmp/profile 擴展模式 :%s@^[[:space:]]\{1,\}@@g
2 復制
/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令為/tmp/functions的每行開頭為空白字符的行的行首添加一個#號
~]#
cp /etc/rc.d/init.d/functions /tmp/
:%s@^[[:space:]]\{1,\}.*@#&@
關于vim的寄存器
有26個命名寄存器和1個無名名寄存器,經常存放不同的剪貼板內容,可以不同會話之間進行共享使用
這26個命名寄存器分別用26為英文字母表示, 用"寄存器表示,放在數字和命令之間
例如 5"wyy 表示復制5行內容到w寄存器中
"wp
表示將w寄存器內容粘貼
如果未指定的話,將默認使用無命名的寄存器
另外還有10個數字寄存器,用0-9表示,0存放最近復制內容,1存放最近傷處內容,當新的文本變更和刪除的時候,1將轉存到2,2轉存到3,以此類推。
數字寄存器不能在不同會話之間共享。
處理編輯二進制文件
以二進制方式打開文件
vim -b
二進制文件
擴展命令模式下,利用xxd命令轉換為可讀的十六進制 例如 %!xxd
轉換回二進制
%!xxd -r
vim 可視化模式
v 光標走過的字符
V
光標走過的行
Ctrl+v 可視塊
可以結合編輯命令,d,c,y
還可以結合移動鍵等
突出顯示的文字可以被刪除,復制,變更,過濾,搜索,替換等操作。
vim 多文件模式
vim file1 file2 file3
在擴展模式下輸入
next 下一個
prev 前一個
first 第一個
last 最后一個
wall
保存所有
qall 退出所有
wqall 保存所有
vim 多窗口模式
多文件分割:
vim -o file1
file2
-o 水平分割顯示窗口
-O
垂直分割顯示窗口
在窗口之間進行切換操作:Ctrl+w ,Arrow
單文件窗口分割:
Ctrl+w s 單個文件水平分割
Ctrl+w v
垂直分割
Ctrl+w q 取消相鄰窗口
Ctrl+w o
取消全部窗口
:wqall 退出
注意:快捷鍵使用是不會顯示的,按過快捷鍵后跟字母選項,就能達到效果
定制vim的工作特性
配置文件:永久有效
全局 /etc/vimrc
個人 ~/.vimrc
擴展模式下窗口屬性定義
set nu 顯示行號
set nonu
取消顯示
set sm 顯示括號匹配
set nosm 取消括號匹配
set
ai 啟動自動縮進功能
set noai 取消自動縮進功能
set hlsearch
顯示高亮搜索
set nohlsearch 取消高亮搜索
syntax no 啟用語法高亮
syntax off 取消語法高亮
set ic 忽略字符的大小寫
set
noic 不忽略字符的大小寫
fileformat=unix 啟用文件格式
fileformat=dos 不忽略
set textwidth=65 設置文本寬度
set
wrapmargin=15 設置文本寬度
練習
1 如何設置tab縮進為4個字符
1、 vim /etc/vimrc
set ts=4
2
復制/etc/rc.d/init.d/functions 文件至 /tmp目錄
;替換/tmp/functions文件中的/etc/sysconfig/init為/var/log
cp
/etc/rcd/init.d/finctions /tmp/
%s@etc/sysconfig/init@/var/log@gi
3 刪除/tmp/functions 文件中所有以#開頭,且#后面至少有一個空白字符的行的行首的#號;
:%s@^#[[:space:]]\{1,\}.*@@
原創文章,作者:小馬哥,如若轉載,請注明出處:http://www.www58058.com/32915