vi:Visual Tnterface文本編輯器
vim:vi Improved vi的加強版
文本編輯種類:
行編輯器:sed
全屏編輯器:nano,vi,vim
其他編輯器::
gedit:一個簡單的圖形編輯器
gvim:一個vim編輯器的圖形版本
vim使用格式
+# :打開文件后,直接讓光標處于第#行的行首
+/pattern:打開文件后,直接讓光標處于第一個被模式匹配到的行的行首
+ file:打開文件,光標在最后一行
-b file:二進制方式打開文件
-d file1 file2…:比較多個文件
-m file :只讀打開文件
如果該文件存在,文件被打開并顯示內容
如果該文件不存在,編輯完后第一次保時創建它
vim的三種主要模式
命令模式:默認進入文件就處于此模式==>移動光標,剪切/粘貼文本
插入(編輯)模式:修改文本
擴展命令模式:保存,退出 ==>我習慣叫末行模式
ESC鍵:退出當前模式
ECS鍵ESC鍵:總是返回到命令模式
模式轉換
命令模式(默認模式)—>插入模式
i:inset,在光標所在處輸入
I:在光標所在行的行首輸入
a:append,在光標所在處的后面輸入
A:在光標所在行的行尾輸入
o:在當前光標所在行的下方打開一個新行
O:在當前光標所在行的上方打開一個新行
插入模式–>命令模式
Esc鍵
命令模式—>擴展命令模式
:
擴展命令模式—>命令模式
Esc鍵
鎖定和解鎖:
ctrl+s鎖定 ctrl+q解鎖
關閉文件:
在命令模式下
ZQ:不保存退出
ZZ:保存并退出
在擴展命令模式下
:q退出
:wq保存退出
:q!強制退出不保存
:x保存退出
:w /path/to/somefile :保存至新文件(類似另存為)
命令模式光標跳轉
字符跳轉:
h:左 l:右 j:下 k:上
#command(hjkl):跳轉#個字符
單詞跳轉:
w:下一個單詞的詞首
e:當前或下一個單詞的詞尾
b:當前或前一個單詞的詞首
#command(web):跳轉#個單詞
當前頁跳轉:
H:頁首 M:頁中間 L:頁尾
行首行尾跳轉:
^:跳轉至行首的第一個非空白字符
$:跳轉至行尾
0:跳轉至絕對行首
行間跳轉:
#G:跳轉至#行
G:跳轉最后一行
1G或者gg:跳轉至第一行
句間跳轉:
(:上一句
):上一句
段落間跳轉:
{ :上一段
} :下一段
命令模式翻屏操作
ctrl+f :向文件尾部翻一屏
ctrl+b :向文件首部翻一屏
ctrl+d :向文件尾部翻半屏
ctrl+u :向文件首部翻半屏
命令模式操作
字符編輯
x :刪除光標處的字符
#x:刪除光標處起始的#個字符
xp:交換光標所在處的字符及其后面字符的位置
~ :轉換大小寫
替換命令
r:替換光標所在處的字符
R:切換成REPLACE模式
刪除命令:
d:刪除命令可結合光標跳轉字符,實現范圍刪除
d$:刪除到行尾
d^:刪除到非空行首
d0:刪除到行首
dw:刪除光標所在處到下一個單詞的詞首的內容
de:刪除光標到當前或下一個單詞的詞尾的內容
db:刪除光標到當前或前一個單詞的詞首的內容
#command:刪除#個單詞
dd:刪除整行
#dd:刪除#行
D:刪除光標所在處到行尾的字符,留空行,等同于d$
執行了一些命令,結果如下
-
執行了d$,刪除了光標到行尾的字符(此處光標在行首)
-
執行了d^,刪除了光標到行首的字符(非空白)(我在行首加了空白字符)
-
執行了d0,刪了了光標到行首的字符(包含空白字符)
-
執行了dw,刪除了光標所在處到下一個單詞的詞首的內容
-
執行了de,刪除光標到當前或下一個單詞的詞尾的內容
-
執行了db,刪除光標到當前或前一個單詞的詞首的內容
-
執行了dd,刪了整行
-
又執行了2dd,刪除了兩行
-
執行了D,刪除光標所在處到行尾的字符
這截圖和上面的說明看的我自己都蒙了,
復制命令(y,yank):
y: 復制,和d命令用法類似
y$: 復制光標所在處到行尾
y^:復制光標所在處到非空行首
y0:復制光標所在到行首
yw:復制光標所在處到下一個單詞的詞首的內容
ye:復制光標到當前或下一個單詞的詞尾的內容
yb:復制光標到當前或前一個單詞的詞首的內容
#command:復制#個單詞
yy復制整行
#yy:復制#行
Y:復制整行
粘貼命令(p,paste):
p:緩沖區存的如果為整行,則粘貼當前光標所在行的下方,
否則,則粘貼至當前光標所在處的后方
P:緩沖區存的如果為整行,則粘貼當前光標所在行的上方,
否則,則粘貼至當前光標所在處的前方
整行
非整行
改變命令(c,change)
命令模式—>插入模式,顯示刪除操作
c:刪除命令。可結合光標跳轉字符,實現范圍刪除
c$:刪除光標所在處到行尾的字符
c^:刪除光標所在處到非空行首的字符
c0: 刪除光標所在處到絕對行首的字符
cw:刪除光標所在處到下一個單詞的詞首的內容
ce:刪除光標到當前或下一個單詞的詞尾的內容
cb :刪除光標到當前或前一個單詞的詞首的內容
#command(dw,de,db) 3dw:向后刪了三個單詞
c:刪除當前光標到行尾,并切換成插入模式
#c c 3cc:刪除光標所在處的行起始的3行,然后
以上是刪除光標所在處的一些行或字符,然后轉換為插入模式
c,d,y的一些可以通用的命令
命令模式下還有些特殊用法:
100iwang[esc]粘貼“wang”100次
<start position> <command> <end position>
command:
y復制,d刪除,gU變大寫,gu變小寫
例如我使用了0gU$命令,從行首到行尾都變成大寫字母
這里我使用了.gu$, .表示當前位置,到行尾變成那個小寫字母
擴展模式:地址定界
和sed的地址定界差不多
#:特定的第#行,例如5即第五行
. :表示當前行
#,# 指定行范圍。左起始行,右結束行
#,+#:指定行范圍,左側為起始行的絕對編號,右側問哦相對左側行號的偏移量
例如:3,+7 為第三行開始,后面的7行,包含第三行
. +6:當前行,到后面的6行,共計7行
.,$-1:當前行到倒數第二行
1,.,$:全文
%:全文
/pattern/:第一次被模式所匹配到的行=======>從光標所在處起始
/first/,$:從光標所在處起始向文件尾部第一次被模式所匹配的行到最后一行
/pattern1/,/pattern/:從光標所在處起始向文件尾部,第一個被pattern1匹配的行到第一個被pattern2所匹配的行結束之前的所有行
使用方式:后跟一個編輯命令
d,y,c
w /path/to/somefile:將范圍內的文本保存至指定的文,y件中
r /path/form.somefile :將指定的文件中的文本讀取并插入指定位置
擴展模式:查找
/pattern:從當前光標所在處向文件尾部查找能夠被當前模式匹配到的使用字符串,
?pattern:從當前光標所在處向文件首部查找能夠被當前模式匹配到的使用字符串,
n;下一個。與命令方向相同
N: 上一個,與命令方向相反
擴展模式:查找并替換
s:末行模式的命令;使用格式
s/要查找的內容/替換為的內容/修飾符
要查找的內容:可用正則表達式;
替換為的內容:不能使用正則表達式,但可以引用
如果要“查找的內容”部分在模式中使用了分組符號:
在“替換為的內容”中使用 后向引用; \1,\2,
也可以使用“&”引用前面查找時查找到的整個內容
直接引用查找模式 匹配到的全部文本
修飾符:
i:忽略大小寫
g:全局替換,意味著一行中如果匹配到多次,則均替換,默認替換匹配到的行的第一個出現的
gc:全局替換,每次替換前詢問
可把分隔符替換為非常用字符
s@@@@ ,s###
命令模式:撤銷更改
u撤銷最近的更改
#u撤銷之前的#次修改
U撤銷光標落在這行后所有此行的更改
ctrl+r恢復此前的撤銷操作==>感覺撤銷的錯了,取消撤銷的動作
點號. :重復執行前一個編輯操作
#.:重復前一個操作#次
vim的寄存器
有26個命名寄存器和1個無名寄存器,長存放不同的剪貼板內容,可以不同會話鍵共享
用a,b,c…..z表示,用“表示寄存器,放在數字和命令之間
例如:3”tyy表示復制3行到t寄存器中
“tp表示將t寄存器內容粘貼
復制第四行到a寄存器,然后將a寄存器內容到粘貼至光標所在行的下一行
未指定,將使用無名寄存器
有10個數字寄存器,用數字0-9表示,0存放最近復制的內容,1存放最近刪除內容。
當新的文本變更和刪除時,1轉存到2,2轉存到3,以此類推,數字寄存器不能再
不同會話間共享
編輯二進制文件
以二進制方式打開文件
vim -b binaryfile
擴展命令模式下,利用xxd命令轉換為可讀的十六進制
:%!xxd
擴展命令模式下,利用xxd命令轉換回二進制
:%!xxd -r
可視化模式
允許選擇的文本塊
v:字符
V:行
ctrl+v 塊
可視化鍵用于移動的鍵
方向鍵,w,),}
突出顯示的文字可以被刪除,復制,變更,過濾,搜索 / 替換等
執行刪除命令
vim多文件模式
vim file1 file2 ….
next:下一個
prev:前一個
first:第一個
last:最后一個
wall:保存所有
qall:退出所有
wqall:保存退出所有
多窗口顯示
多文件切割
vim -o file file2 水平切割
vim -O file file2 垂直切割
單文件窗口切割;
ctrl+w,s:水平分隔
ctrl+w,v:垂直分隔
ctrl+w,q:取消相鄰窗口
ctrl+w,o取消全部窗口
:wqall全部保存退出
vim的工作特性
配置文件:永久有效
全局:/etc/vimrc
個人:~/.vimrc
如下配置顯示行號和自動縮進
擴展模式:對當前進程有效
-
行號
顯示: set number 簡寫為set nu
取消顯示:set nonumber 簡寫 set nonu
2.括號成對匹配
匹配:set shuowmatch 簡寫set sm
取消: 簡寫set nosm
3.自動縮進
啟用:set ai
禁用:set noai
4.高度搜索
啟用:set hlsearch
禁用:set nohlsearch
5.語法高亮
啟用:syntax on
禁用:syntax off
6.忽略字符的大小寫
啟用:set ic
不忽略:set noic
7.文件格式
啟用:filefoemat=unix ==>linux
不忽略:fileformat=dos==>windows
8.設置文本寬度
:set textwidth=65(vim only)
:set wrapmargin=15
練習:
? 1 、復制/etc/profile 至/tmp/ 目錄,用查找替換命令刪除
/tmp/profile 文件中的行首的空白字符
指令:
擴展命令模式下
:%s@^[[:space:]]\+@@
? 2 、復制/etc/rc.d/init.d/functions 文件至/tmp 目錄,用查
找替換命令為/tmp/functions 的每行開頭為空白字符的行的
行首添加一個#號
指令:
擴展命令模式下
:%s@^[[:space:]]\+@#@
3 、如何設置tab 縮進為4 個字符?
指令:
vim .vimrc 然后設置tabstop=4,這個是針對當前用戶 要設置全局要在/etc/vimrc
4 、復制/etc/rc.d/init.d/functions 文件至/tmp 目錄;替換
/tmp/functions 文件中的/etc/sysconfig/init 為/var/log; ;
在擴展命令模式下:
:%s@/etc/sysconfig/init@/var/log@
5、刪除/tmp/functions 文件中所有以# 開頭,且# 后面至少
有一個空白字符的行的行首的# 號;
在擴展命令模式下
%s@^#\([[:space:]]\+\)@\1@
原創文章,作者:qiuwei,如若轉載,請注明出處:http://www.www58058.com/32418