目錄
本系列先前的隨筆位于新浪博客
前言Vi和Vim都是文本編輯器,不同的是Vim是Vi的升級版本,它不僅兼容Vi的所有指令,而且還有一些新的特性在里面。
Vim/Vi是一個功能強大的全屏幕文本編輯器,是linux/UNIX上最常用的文本編輯器,主要用于使用Linux Sever時進行類似于DOS下批處理的Shell腳本編程,以及進行配置文件的修改,它的作用是建立、編輯、顯示文本文件。
Vim/Vi沒有菜單,只有命令
Vim/Vi的三種工作模式:
命令 | 作用 |
a(append) | 在光標后附加文本 |
A | 在本行行末附加文本,即光標移至行末并進入插入模式 |
i(insert) | 在光標前插入文本 |
I | 在本行行首插入文本,即光標移至行首并進入插入模式 |
o | 在光標下插入新行 |
O | 在光標上插入新行 |
命令 | 作用 |
h、方向左鍵 | 光標左移一個字符 |
j、方向下鍵 | 光標下移一行 |
k、方向上鍵 | 光標上移一行 |
l、方向右鍵 | 光標右移一個字符 |
$ | 光標移至行尾 |
0 | 光標移至行首 |
H(High) | 光標移至屏幕上端 |
M(Middle) | 光標移至屏幕中央 |
L(Low) | 光標移至屏幕下端 |
:set nu | 顯示行號 |
:set nonu | 取消顯示行號 |
gg | 光標到第一行 |
G | 光標到最后一行 |
nG、:n | 光標到第n行 |
命令 | 作用 |
x | 刪除光標所在處字符 |
nx | 刪除光標所在處后n個字符 |
dG | 刪除光標所在行起到文件末尾的內容 |
D | 刪除從光標所在處到行尾 |
:n1,n2d | 刪除指定范圍(n1~n2)的行 |
命令 | 作用 |
yy、Y | 復制當前光標所在行 |
nyy、nY | 復制當前光標所在行起n行 |
dd | 剪切當前光標所在行 |
ndd | 剪切當前光標所在行起n行 |
p(paste) | 粘貼在當前光標所在行下面 |
P | 粘貼在當前光標所在行上面 |
命令 | 作用 |
r(replace) | 替換光標所在處字符 |
R | 從光標所在處開始替換字符,按Esc結束 |
u(undo) | 撤銷上一步操作 |
命令 | 作用 |
/string | 從前向后搜索指定字符串string 按n跳到下一個指定字符串出現的位置 按N跳到上一個指定字符串出現的位置 搜索時忽略大小寫:set ic |
:%s/old/new/g | 全文替換指定字符串(用new替換old) |
:n1,n2s/old/new/g | 在一定范圍(n1~n2)內替換指定字符串 |
命令 | 作用 |
:w | 保存修改 |
:w new_filename | 另存為指定文件 |
ZZ、:wq | 保存修改并退出 |
:q! | 不保存修改退出 |
:wq!(只有管理員root或 文件的所有者可以使用) | 保存修改并退出 可忽略文件的只讀屬性 |
1.在當前文件末尾導入其他文件的內容 :r 文件名
2.在Vim/Vi中執行命令 :! 命令
3.在當前文件末尾導入命令執行的結果(上面兩個命令結合) :r !命令
范例:常用于把當前時間導入到文件末尾用來標識最后一次修改時間 :r !date
4.定義快捷鍵 :map 快捷鍵 觸發命令 ?。ㄈ∠x的快捷鍵:unmap 快捷鍵)
范例:定義快捷鍵ctrl+p在行首插入#注釋本行 :map ^P I#<ESC> (^P并不是直接打出來的,而是先按ctrl+v,再按ctrl+p,I為在行首插入,#為注釋符號,在Shell腳本和Linux系統配置文件中#表示注釋,<ESC>表示從插入模式返回到命令模式)
定義快捷鍵ctrl+b刪掉行首字符(多用于取消注釋) :map ^B 0x ?。?把光標移至行首,x刪除這個字符)
定義快捷鍵ctrl+e在當前光標前插入我的郵箱地址 :map ^E iupc_eniac12@163.com<ESC>
5.連續行注釋 :n1,n2s/^/#/g (實際上就是之前提到過的替換命令,^表示行首(是直接打出來的,不是ctrl+v),這里的行首指的是這個位置不是光標移到行首指示的那個是字符,所以這么命令起到的作用是添加而不是替換,要添加的符號是#)
在大多數程序設計語言中注釋符號是//,而不是#,這時連續行注釋要這么寫 :n1,n2s/^//////g (錯誤的寫法:n1,n2s/^////,Vim識別不出中間的//為要添加的內容,所以要用轉義字符'//'表示'/',new的地方是////,使用了轉義字符表示//)
6.連續行取消注釋 :n1,n2s/^#//g ?。╚#表示行首的#,把行首#替換成空,即刪除行首#)
7.實時替換 :ab mymail upc_eniac12@163.com ?。╝b是替換命令,把a替換成b,此處a是mymail,b是upc_eniac12@163.com,該命令是實時替換即當我們在文本中輸入mymail后再按下空格或ESC,Vim會自動把我們剛才輸入的mymail替換成upc_eniac12@163.com,所以這是一個懶人必備的命令,取消這個實時替換的命令是:unab mymail)
上述對Vim的設置只在本次打開有效,如果要讓其再任意時刻打開都有效需要編輯Vim的配置文件(~/.vimrc,~表示用戶的宿主目錄,管理員root的宿主目錄缺省在/root下面,普通用戶的宿主目錄缺省在/home下面),配置文件.vimrc缺省是空的,例如在文件中寫入set nu,則以后每次打開Vim都會默認顯示行號
總結Vim/Vi博大精深,初學者使用會覺得十分復雜,操作效率低下,但當你完全熟悉了它之后,你就會覺得它簡直就是個神器,使用它可以極大的提高我們碼代碼的效率。
這是一個你不需要使用鼠標,不需使用小鍵盤,只需要使用大鍵盤就可以完成很多復雜功能文本編輯的編輯器,不然,Visual Studio也不就會有vim的插件了。
學習vim就像學彈鋼琴一樣,一旦學會,受益無窮。
另外這里還有一篇關于Vim比較不錯的文章,想要深入學習可以看一看
新聞熱點
疑難解答