1. 程式人生 > 實用技巧 >文字編輯工具之神VIM

文字編輯工具之神VIM

文字編輯工具之神VIM

1、vi和vim簡介

vi:Visual editor,文字編輯器,是Linux必備工具之一

vim:Visual editor iMproved,和vi使用方法一致,功能更強大

參考連結

http://www.w3cschool.cn/vim/

2、使用vim初步

1、vim命令格式
vim [OPTION]... FILE...

常用選項

+#	開啟檔案後,讓游標處於第#行的行首,+預設行尾
+/PATTERN	讓游標處於第一個被PATHERN匹配到的行行首
-b  file	二進位制方式開啟檔案
-d  file1  file2...	比較多個檔案,相當於vimiff
-m  file	只讀開啟檔案
-e  file	直接進入ex模式,相當於執行ex  file
-y  file	Easy  mode(like “evim”,modeless),直接可以操作檔案,ctrl+o :wq | q!   儲存和不儲存退出

說明:

​ 如果該檔案存在,檔案被開啟並顯示內容

​ 如果該檔案不存在,當編輯後第一次存檔時建立它

2、三種主要模式和轉換

命令或普通(Normal)模式:預設模式,可以實現游標移動,剪下/貼上文字
插入(insert)或編輯模式:用於修改文字
擴充套件命令(extended command)或命令(末)行模式:儲存,退出等

命令模式-->插入模式

i		insert,在游標所在處輸入
I		在當前游標所在行的行首輸入
a		append,在游標所在處後面輸入
A		在當前游標所在行的行尾輸入
o		在當前游標所在行的下方開啟一個新行
O		在當前游標所在行的上方開啟一個新行

插入模式--ESC-->命令模式
​命令模式--:-->擴充套件命令模式
​擴充套件命令模式--ESC,enter-->命令模式

範例:

切換至插入模式

按ctrl+v+[ 三個鍵,顯示^[
後續輸入顏色資訊,如[[32mhello[[0m
切換至擴充套件命令模式,儲存退出

3、擴充套件命令模式

1、擴充套件命令模式基本命令
w      寫(存)磁碟檔案
wq	寫入並退出
x	寫入並退出
X	加密
q!	不存檔強制退出,即使更改都將丟失
r	filename		讀檔案內容到當前檔案中
w	filename		將當前檔案內容寫入另一個檔案
!command		執行命令
r!command		讀入命令的輸出
2、地址定界

格式:

:start_pos,end_pos CMD

1、地址定界格式
#         #具體第#行,例如2表示第二行
#,#	 #從左側#表示開始起始行,到右側#表示結尾行
#,+#	 #從左側#表示的起始行,加上右側#表示的行數,範例:2,+3	表示2到5行
.	 #當前行
$	 #最後一行
.,$-1	 #當前行到倒數第二行
%	 #全文,相當於1,$

/pattern/		  #從當前行向下查詢,直到匹配pattern的第一行,即:正則表示式
/part1/,/part2/	  #從第一次被part1模式匹配到的行開始,一直到第一次被part2匹配到的行結束
#,/pat/		  #從指定行開始,一直找到第一個匹配pattern的行結束
/pat/,$			  #向下找到第一個匹配patttern的行列整個檔案的結尾的所有行
2、地址定界後跟一個編輯命令
d	    #刪除
y	    #複製
w  file	    #將範圍內的行另存至指定檔案中
r   file    #在指定位置插入指定檔案中的所有內容
3、查詢並替換

格式

s/要查詢的內容/替換為的內容/修飾符

說明:

要查詢的內容,可使用基本正則表示式模式

替換為的內容分,不能使用模式,但可以使用\1,\2, ...等後向引用符號:還可以使用“$”引用前面查詢時查詢到的整個內容

修飾符:

i    #忽略大小寫
g    #全域性替換,預設情況下,每一行至替換第一次出現
gc   #全域性替換,每次替換前詢問

查詢替換中的分隔符/可替換為其他字元,如:#,@

範例:

s@/etc/@var@g
s# /boot#/#i
4、定製vim的工作特性

擴充套件命令模式的配置只對當前程序有效,可將配置放在檔案中持久儲存

配置檔案:

​ /etc/vimrc #全域性

​ ~/ .vimrc #個人

1、行號

顯示:set number,簡寫set nu
取消顯示:set nonumber,簡寫set nonu

2、忽略字元的大小寫

啟用:set ignorecase,簡寫 set ic
禁用:set noic

3、自動縮排

啟用:set autoindent,簡寫 set ai
禁用:set noai

4、複製保留格式

啟用:set paste
禁用:set nopaste

5、顯示Tab ^I和換行符 和$顯示

啟用:set list
禁用:set nolist

6、高亮搜尋

啟用:set hlsearch
禁用:set nohlsearch 簡寫:bolh

7、語法高亮

啟用:syntax on
禁用:syntax off

8、檔案格式

啟用window格式:set fileformat=dos
啟用unix格式:set fileformat=unix
簡寫;set ff=dos | unix

9、Tab用空格代替

啟用:set expandtab 預設為8個空格代替Tab
禁用:set noexpandtab
簡寫:set et

10、Tab用指定空格的個數代替

啟用:set tabstop=# 指定#個空格代替Tab
禁用:set ts=4

11、設定文字寬度

set texwidth=65 (vim only)
set wrapmargin=15

12、設定游標所在行的標識線

啟用:set cursorline,簡寫 set cul
禁用:set nocursorling

13、加密

啟用:set key=password
禁用:set key=

14、瞭解更多

set幫助
:help option-list
:set or :set all

4、命令模式

1、退出vim

ZZ 儲存退出
ZQ 不儲存退出

2、游標跳轉

字元間跳轉:

​ h:左 l:右 j:下 k:上

COMMAND:跳轉由#指定的個數的字元

單詞跳轉:

w:下一個單詞的詞首
e:當前或下一個單詞的詞首
b:當前或前一個單詞的詞首

COMMAND:由#指定一次跳轉的單詞數

當前頁跳轉:

H:頁首 M:中間頁 L:頁底
zt:將游標所在當前行移到螢幕頂端
zz:將游標所在當前行移到螢幕中間
zb:將游標所在當前行行移到螢幕底端

行首行尾跳轉;

^ 跳轉至行首的第一個非空白字元
0 跳轉至行尾
$ 跳轉至行尾

行間移動:

G 或擴充套件命令模式下 :# 跳轉至由第#行

G 最後一行
1G,gg 第一行

句間移動:

)下一句(上一句

段落間移動:

}下一段{上一段

命令模式翻屏操作:

Ctrl+f 向檔案尾部翻一屏
Ctrl+b 向檔案首部翻一屏
Ctrl+d 向檔案尾部翻半屏
Ctrl+u 向檔案首部翻半屏

3、字元編輯

x 刪除游標所在處的字元

x 刪除游標處起始的#個字元

xp 交換游標所在處的字元及其後面字元的位置
     轉換大小寫

J 刪除當前行後的換行符

4、替換命令(replace)

r 只替換游標在處的一個字元
R 切換成REPLACE模式 (在末行出現--REPLACR--提示),按ESC回到命令模式

5、刪除命令(delete)

d 刪除命令,可結合游標跳轉字元,實現範圍刪除
d$ 刪除到行尾
d^ 刪除到非空行首
d0 刪除到行首
dw
de
db

COMMAND

dd:剪下游標所在的行

dd多行刪除

D:從當前游標位置一直刪除到行尾,等同於d$

6、複製命令(yank)

y 複製,行為相似於d命令
y$
y0
y^
ye
yw
yb

COMMAND

yy:複製行

yy:複製多行

Y:複製整行

7、貼上命令(paste)

p 緩衝區存的如果為整行,則貼上當前游標所在行的下方;否則,則貼上至當前游標所在處的後面
P 緩衝區存的如果為整行,則貼上當前游標所在行的上方;否則,則貼上至當前游標所在處的前面

8、改變命令(change)

c:刪除後切換成插入模式
c$
c^
co
cb
ce
cw

COMMAND

cc:刪除當前行並輸入新內容,相當於S

cc

C:刪除當前游標到行尾,並切換成插入模式,相當於c$

9、查詢

/PATTERN:從當前游標所在處向檔案尾部查詢
?PATTERN:

10、撤銷更改

u 撤退最近的更改,相當於window中ctrl+z

u 撤銷之前多次更改

U 撤銷游標落在這行後所有此行的更改
Ctrl-r 重做最後的"撤銷"更改,相當於window中ctrl+y
. 重複前一個操作

. 重複前一個操作#次

11、高階用法


常見Command:y複製、d刪除、gU變大寫、gu變小寫

範例:

0y$   命令
0  先到行頭
y   從這裡開始拷貝
$    拷貝到本行最後一個字元

範例:貼上”wang“次

100iwang   [ESC]

di" 游標在""之間,則刪除""之間的內容
yi( 游標在()之間,則複製()之間的內容
vi[ 游標在[]之間,則選中[]之間的內容
dtx 複製字元直到遇見游標之後的第一個x字元
ytx 複製字元直接遇見游標之後的第一個x字元

5、視覺化模式

在末行有"--VISUAL--"指示,表示在視覺化模式

允許選擇的文字塊

​ v面向字元,--VISUAL--

​ V面向整行,--VISUAL LINE--

​ ctrl+v面向塊,--VISUAL LINK--

視覺化鍵可用於與移動鍵結合使用

範例:在檔案每一行的行首插入#

1、先將游標移動到第一行的行首
2、輸入ctrl+v    進入視覺化模式
3、輸入   G    跳到最後一行,選中每一行的第一個字元
4、輸入   I    切換至插入模式
5、輸入  #  

6、按ESC鍵

範例;在指定的塊位置插入相同的內容

1、游標定位到要操作的地方
2、Ctrl+v   進入”可視   塊“模式,選取這一列操作多少行
3、SHIFT+i(I)
4、輸入要插入的內容
5、按   ESC  鍵

6、多檔案模式

vim FILE1 FILE2 FILE3 ...

:next 下一個
:prev 前一個
: first 第一個
:last 最後一個
:wall 儲存所有
:qall 不儲存退出所有
:wqall 儲存退出所有

7、標記和巨集(macro)

ma 將當前位置標記為a, 26個字母均可做標記,mb、 mc等等
'a 跳轉到a標記的位置,實用的文件內標記方法,文件中跳躍編輯時很有用
qa 錄製巨集 a, a為巨集的名稱,末行提示: recording @a
q 停止錄製巨集
@a 執行巨集a
@@ 重新執行上次執行的巨集

8、編輯二進位制檔案

#以二進位制方式開啟檔案
vim -b binaryfile
#擴充套件命令模式下,利用xxd命令轉換為可讀的十六進位制
:%! xxd
#切換至插入模式下,編輯二進位制檔案
#切換至擴充套件命令模式下,利用xxd命令轉換回二進位制
:%! xxd
-r
#儲存退出