文字編輯工具之神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
#儲存退出