# Step 1
《 V I M 教 程 》摘要(版本 1.5)
(注釋:本文僅為個人學習摘要,推薦啟動本教程學習,只需vi裡要輸入命令$ vimtutor )
vim 是一個具有很多命令的功能非常強大的編輯器。限於篇幅,在本教程當中
就不詳細介紹了。本教程的設計目標是講述一些必要的基本命令,而掌握好這
些命令,您就能夠很容易將vim當作一個通用的萬能編輯器來使用了。
完成本教程的內容大約需要25-30分鐘,取決於您訓練的時間。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第一講小結
1. 游標在螢幕文本中的移動既可以用方向鍵,也可以使用 hjkl 字母鍵。
h (左移) j (下行) k (上行) l (右移)
2. 欲進入vim編輯器(從命令列提示符),請輸入∶vim 檔案名稱 <斷行符號>
3. 欲退出vim編輯器,請輸入以下命令放棄所有修改∶
<ESC> :q! <斷行符號>
或者輸入以下命令儲存所有修改∶
<ESC> :wq <斷行符號>
4. 在正常模式下刪除游標所在位置的字元,請按∶ x
5. 在正常模式下要在游標所在位置開始插入文本,請按∶
i 輸入必要文本 <ESC>
特別提示∶按下 <ESC> 鍵會帶您回到正常模式或者取消一個不期望或者部分完成
的命令。
好了,第一講到此結束。下面接下來繼續第二講的內容。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二講小結
1. 欲從當前游標刪除至單字/單詞末尾,請輸入∶dw
2. 欲從當前游標刪除至當前行末尾,請輸入∶d$
3. 欲刪除整行,請輸入∶dd
4. 在正常模式下一個命令的格式是∶
[number] command object 或者 command [number] object
其意是∶
number - 代表的是命令執行的次數
command - 代表要做的事情,比如 d 代表刪除
object - 代表要操作的對象,比如 w 代表單字/單詞,$ 代表到行末等等。
$ (to the end of line), etc.
5. 欲撤消以前的操作,請輸入∶u (小寫u)
欲撤消在一行中所做的改動,請輸入∶U (大寫的U)
欲撤消以前的撤消命令,恢複以前的操作結果,請輸入∶CTRL-R
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三講小結
1. 要重新置入已經刪除的常值內容,請輸入小寫字母 p。該操作可以將已刪除
的常值內容置於游標之後。如果最後一次刪除的是一個整行,那麼該行將置
於當前游標所在行的下一行。
2. 要替換游標所在位置的字元,請輸入小寫 r 和要替換掉原位置字元的新字
符即可。
3. 更改類命令允許您改變指定的對象,從當前游標所在位置直到對象的末尾。
比如輸入 cw 可以替換當前游標到單詞的末尾的內容;輸入 c$ 可以替換當
前游標到行末的內容。
4. 更改類命令的格式是∶
[number] c object 或者 c [number] object
下面我們繼續學習下一講。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第四講小結
1. Ctrl-g 用於顯示當前游標所在位置和檔案狀態資訊。Shift-G 用於將游標跳
轉至檔案最後一行。先敲入一個行號然後按 Shift-G 則是將游標移動至該行
號代表的行。
2. 輸入 / 然後緊隨一個字串是則是在當前所編輯的文檔中向後尋找該字串。
輸入問號 ? 然後緊隨一個字串是則是在當前所編輯的文檔中向前尋找該字
符串。完成一次尋找之後按 n 鍵則是重複上一次的命令,可在同一方向上查
找下一個字串所在;或者按 Shift-N 向相反方向尋找下該字串所在。
3. 如果游標當前位置是括弧(、)、[、]、{、},按 % 可以將游標移動到配對的
括弧上。
4. 在一行內替換頭一個字串 old 為新的字串 new,請輸入 :s/old/new
在一行內替換所有的字串 old 為新的字串 new,請輸入 :s/old/new/g
在兩行內替換所有的字串 old 為新的字串 new,請輸入 :#,#s/old/new/g
在檔案內替換所有的字串 old 為新的字串 new,請輸入 :%s/old/new/g
進行全文替換時詢問使用者確認每個替換需添加 c 選項,請輸入 :%s/old/new/gc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第五講小結
1. :!command 用於執行一個外部命令 command。
請看一些實際例子∶
:!dir - 用於顯示目前的目錄的內容。
:!rm FILENAME - 用於刪除名為 FILENAME 的檔案。
2. :w FILENAME 可將當前 VIM 中正在編輯的檔案儲存到名為 FILENAME 的文
件中。
3. :#,#w FILENAME 可將當前編輯檔案第 # 行至第 # 行的內容儲存到檔案
FILENAME 中。
4. :r FILENAME 可提取磁碟檔案 FILENAME 並將其插入到當前檔案的游標位置
後面。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第六講小結
1. 輸入小寫 o 可以在游標下方開啟新的一行並將游標置於新開的行首,進入
插入模式。
輸入大寫的 O 可以在游標上方開啟新的一行並將游標置於新開的行首,進入
插入模式。
2. 輸入小寫 a 可以在游標所在位置之後插入文本。
輸入大寫的 A 可以在游標所在行的行末之後插入文本。
3. 輸入大寫的 R 將進入替換模式,直至按 <ESC> 鍵退出替換模式而進入正常
模式。
4. 輸入 :set xxx 可以設定 xxx 選項。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第七講∶線上協助命令
** 使用線上協助系統 **
Vim 擁有一個細緻全面的線上協助系統。要啟動該協助系統,請選擇如下三種方
法之一∶
- 按下 <HELP> 鍵 (如果鍵盤上有的話)
- 按下 <F1> 鍵 (如果鍵盤上有的話)
- 輸入 :help <斷行符號>
輸入 :q <斷行符號> 可以關閉說明視窗。
提供一個正確的參數給":help"命令,您可以找到關於該主題的協助。請實驗以
下參數(可別忘了按斷行符號鍵哦。:)∶
:help w <斷行符號>
:help c_<T <斷行符號>
:help insert-index <斷行符號>
:help user-manual <斷行符號>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第八講∶建立一個啟動指令碼
** 啟用vim的功能 **
Vim的功能特性要比vi多得多,但大部分功能都沒有預設啟用。為了啟動更多的
功能,您得建立一個vimrc檔案。
1. 開始編輯vimrc檔案,這取決於您所使用的作業系統∶
:edit ~/.vimrc 這是Unix系統所使用的命令
:edit $VIM/_vimrc 這是Windows系統所使用的命令
2. 接著匯入vimrc範例檔案∶
:read $VIMRUNTIME/vimrc_example.vim
3. 儲存檔案,命令為∶
:write
在下次您啟動vim的時候,編輯器就會有了文法高亮的功能。您可以繼續把您喜
歡的其它功能設定添加到這個vimrc檔案中。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim 教程到此結束。本教程只是為了簡明地介紹一下vim編輯器,但已足以讓您
很容易學會使用本編輯器了。毋庸質疑,vim還有很多很多的命令,本教程所介
紹的還差得遠著呢。所以您要精通的話,還望繼續努力哦。下一步您可以閱讀
vim手冊,使用的命令是∶
:help user-manual
# Step 2
(注釋:本文僅為個人學習摘要,推薦網上下載本文學習)
Vi IMproved 簡介
edyfox@smth.org ( 滇狐)
http://edyfox.codecarver.org
清華大學軟體學院
北京大學Linux 俱樂部
Unix 下的全螢幕可視化編輯器
由於其原始碼不可獲得,衍生了許多複製版本
nvi 、elvis 、vile 、VIM...
VIM 即Vi IMproved , vi 複製版本之一
VIM 簡介
目前最流行的vi 複製版本
支援目前絕大部分平台
Windows 、Unix 、Linux 、MacOS 、DOS...
功能強大,擴充性強
Bram Moolenaar 編寫
1991 年11 月完成第一個版本
目前最新穩定版本為6.3
慈善軟體
不強制註冊
即使不通過註冊,也能使用VIM 全部功能
註冊使用者可以投票選擇想要的功能
個人家庭使用註冊費10 歐元
用於專業領域編輯工作註冊費30 歐元
繳納的註冊費將用於救助烏幹達的可憐兒童
主要用於救助艾滋病肆虐的地區失去父母的孤兒
什麼人適合使用VIM ?
追求編輯效率的程式員
VIM 的作者是程式員
他為程式員開發了許多有用的功能
其它經常處理純文字的人員
中小型企業Web 開發人員
編寫LaTeX 文檔的研究人員
Unix / Linux 系統管理員
什麼人不適合使用VIM ?
生活、工作和學習無需和純文字打交道的人
處理其它類型的檔案有專門的工具
打字速度慢於智能感知運行速度的人
VIM 目前暫不支援智能感知
被強大的IDE 慣壞了的人強大順手的IDE 比方便快捷的編輯器更重要
主要內容
VIM 簡介
VIM 入門
VIM 基本操作
VIM 快速編輯樣本
編寫自己的.vimrc
VIM 進階
屏蔽系統內建的vimrc
Linux 使用者
建立~/.vimrc 檔案
Windows 使用者
在個人主目錄下建立空文字檔_vimrc
注意顯示副檔名問題
Linux 下中文處理
編輯時不能輸入中文
:set encoding=cp936
菜單顯示是亂碼
:so $VIMRUNTIME/delmenu.vim
:so $VIMRUNTIME/menu.vim
選擇喜歡的字型
通過菜單與對話方塊選擇字型
編輯--> 選擇字型
只有等寬字型可以被選中
適合程式員使用的字型基本原則
Bitstream Vera Sans Mono
0Oo 1Il
:set guifont?
記住選中的字型名稱
將顯示結果抄下來備用
寫入.vimrc
VIM 不能自動記住你所做的配置修改
需要手工寫入.vimrc
雙引號開頭的行表示注釋
你現在的.vimrc 也許是這個樣子的:
" Windows 下建議也加上這句set encoding=cp936
" 這兩句只在Linux 下需要so $VIMRUNTIME/delmenu.vim so $VIMRUNTIME/menu.vim
" 設定字型。" 字型名稱可以通過前一節介紹的語句獲得," 如果字型名稱中含有空格," 需要在空格前面加上一個反斜線,如下:set guifont=Courier/ 9
VIM 基本操作
VIM 是一個有模式的編輯器
Normal 模式下按鍵序列對應命令
按i 鍵進入Insert 模式
按: 進入command 模式
Insert 模式下可以輸入文本
按ESC 回到Normal 模式
Command 模式下輸入命令
有模式導致VIM 快速鍵長度較短
使用hjkl
VIM 支援使用方向鍵移動游標
在insert 狀態下移動游標會比較方便
使用hjkl 移動游標編輯效率更高
距離近,按鍵方便,眼睛無需離開螢幕
俄羅斯方塊
http://vim.sf.net/scripts/script.php?script_id=172
vimtutor
vimtutor 是VIM 入門非常好的學習材料
Linux 使用者
在終端中輸入vimtutor
啟動字元介面的vimtutor
Windows 使用者
在開始菜單中找vimtutor 捷徑
啟動後出現亂碼,重新選擇一個中文字型即可
快速編輯樣本
不再詳細VIM 基本操作
時間所限,對VIM 的介紹不可能面面俱到
水平所限,所講內容不可能強過vimtutor
介紹幾個VIM 快速編輯樣本
對於老使用者,進一步增強記憶
對於新使用者,堅定學習VIM 的決心
尋找替換
準備工作
開啟VIM ,按i ,輸入:
this is a test
尋找替換
按ESC 回到normal 狀態,輸入:
:%s/ /^M/g
其中^M 使用Ctrl-v.Ctrl-m 的方式輸入
將所有空格替換為斷行符號,文本變為4 行
行的拼接
尋找/n 替換為空白格可以實現拼接
這裡使用j 命令拼接行
按ggVG ,全選
按: ,此時命令列顯示為:
:'<,'>
在其後輸入j ,斷行符號
拼接完畢
複製粘貼與重複動作
在normal 狀態下按yy ,複製當前行
按12p ,螢幕上即出現13 行上述字樣
12 表示將其後的命令執行12 次
p 表示粘貼到當前行之後
VIM 裡大部分命令都可以加上數字表明執行次數
列操作
選中全文第一列
按gg 跳到開頭
按Ctrl-v 進入列選擇狀態
按G 跳到末尾
將每行第一列變為大寫
按U 表示把選中內容變大寫
按u 表示把選中內容變小寫
按~ 表示翻轉原有大小寫
列操作
在每行前面加一個星號和一個空格
選中第一列
按I 進入插入狀態
輸入* ,按ESC
選中前兩列後按x ,可以進行列刪除
編程時可以用於批量注釋和批量解注釋
宏的錄製
將所有偶數行的a 改成another
錄製宏
按gg 進入第一行
按qm 進入宏錄製狀態,錄製到寄存器m
按j 進入第二行,按$ 跳到行末
按2b ,游標停在字母a 上
按caw ,輸入another ,按ESC ,按j 進入下一行
按q 結束宏的錄製
宏的播放
單次播放
按下@m ,執行m 寄存器中的宏
可以發現第4 行的a 也變成了another
多次播放
輸入1000@m
可以發現所有偶數行的a 都變成了another
到達檔案底部時宏執行出錯,會自動停止
最終並沒有真的執行1000 次
點命令
在每行末尾添加一個驚嘆號
執行次數不多的簡單操作無需使用宏
按gg 進入第一行,按A 進入行尾添加狀態
輸入! ,按ESC ,按j 進入第二行
按. 表示重複前一個操作,即行尾添加!
反覆按j.j.j.j.
推薦大家左手滑鼠
:%s/$/!/g
VIM 入門
21 天學習計劃
多讀文檔,少走彎路
第一周:每天一遍vimtutor
熟悉基本操作,做到隨心所欲
第二周、第三周:通讀使用者手冊
讀使用者手冊的同時修訂出適合自己的.vimrc
目前手冊有中文版譯本可供下載
.vimrc for Beginners
基本設定
set nocp -設定不相容模式
set ru -開啟狀態列尺規
set hls -搜尋時高亮顯示被找到的文本
set is -遞進搜尋
syntax on -開啟關鍵字上色
set backspace=indent,eol,start
set whichwrap=b,s,<,>,[,]
h,l,~
編碼設定
一段可以自動猜測編碼的指令碼,很強的
" Encoding settings
if has("multi_byte")
" Set fileencoding priority
if getfsize(expand("%")) > 0
set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
else
set fileencodings=cp936,big5,euc-jp,euc-kr,latin1
endif
" CJK environment detection and corresponding setting
if v:lang =~ "^zh_CN"
" Use cp936 to support GBK, euc-cn == gb2312
set encoding=cp936
set termencoding=cp936
set fileencoding=cp936
elseif v:lang =~ "^zh_TW"
" cp950, big5 or euc-tw
" Are they equal to each other?
set encoding=big5
set termencoding=big5
set fileencoding=big5
編碼設定
續前頁
elseif v:lang =~ "^ko"
" Copied from someone's dotfile, untested
set encoding=euc-kr
set termencoding=euc-kr
set fileencoding=euc-kr
elseif v:lang =~ "^ja_JP"
" Copied from someone's dotfile, unteste
set encoding=euc-jp
set termencoding=euc-jp
set fileencoding=euc-jp
endif
" Detect UTF-8 locale, and replace CJK setting if needed
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
endif
else
echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
endif
.vimrc for Beginners
文本編輯設定
set sw=4 -縮排尺寸4 個空格
set ts=4 -Tab 寬度為4 個字元
set et -將所有Tab 替換為空白格
.vimrc for Beginners
C/C++ 編碼設定
set cin -自動縮排
set ai -還是自動縮排
set cino=:0g0t0(sus
set sm -顯示括弧匹配
在console 下粘貼的版式問題
“ :set paste” 、“ set nopaste”
“ =” 命令重調格式
.vimrc for Beginners
斷行設定
set lbr -不在單詞中間斷行
set fo+=mB -開啟斷行模組對亞洲語言支援
其它設定
set selectmode=
set mousemodel=popup
set keymodel=
set selection=inclusive
.vimrc for Beginners
圖形介面與字元介面分別設定
if (has("gui_running")) -圖形介面設定set nowrap -不折行set guioptions+=b -水平捲軸colo torte -色彩配置
else -字元介面設定set wrap -折行colo ron -色彩配置
endif
主要內容
VIM 簡介
VIM 入門
VIM 進階
VIM 常用外掛程式簡介
在VIM 中編寫程式
在VIM 中編寫LaTeX 文檔
外掛程式安裝路徑
$HOME/.vim 或%HOME%/vimfiles
$VIM/vimfiles
$VIMRUNTIME
$HOME/.vim/after 或%HOME%/vimfiles/after
$VIM/vimfiles/after
外掛程式目錄結構
colors
ftplugin
compiler
indent
doc
keymap
plugin
etc
ftdetect
syntax
常用外掛程式推薦
排程工具Calendar
常用外掛程式推薦
塗鴉外掛程式Sketch
常用外掛程式推薦
一系列外掛程式實現的VIM.IDE
視窗管理器+ 檔案瀏覽器(視窗管理器外掛程式)
Tlist + ctags
VIM + ctags + cscope
ctags 、cscope 簡介
常用外掛程式推薦
ViKi + Deplate
類似WiKi 的文法
用於製作基於內容的簡單個人首頁
滇狐的個人首頁就是使用ViKi 製作的
優點
使用方便,功能比較強大
缺點
配置複雜,依賴項太多
在VIM 下編寫程式
正確地編寫Makefile
設定合適的makeprg
例如在有的系統下你也許想用gmake
在Windows 下最好安裝一份tee
能夠看到編譯過程
:set shellpipe=2>&1/|/ tee
根據編譯器輸出正確設定errorformat
在VIM 下編寫程式
常見編譯器可通過VIM 內建指令碼設定參數
:compiler xxx
功能表項目:工具--> Set compiler
使用:make 編譯器
使用:copen 查看錯誤清單
:make
:make clean
copen 小技巧
在多個檔案中搜尋指定字串
將搜尋結果列在一個buffer 中
可以條目跳轉到相應檔案的相應位置
copen 具備這樣的能力
需求
在檔案中檢索指定字串的工具
在檢索結果給出檔案名稱和行號資訊
合適的errorformat 設定
copen 小技巧
設定grep 參數
:set grepprg=grep/ -nH/ $*
建議寫到.vimrc 中
使用grep 命令尋找檔案
:grep "test string 2" *
:grep -R "test string 2"
:grep "function" *.cpp
在VIM 下編寫LaTeX 文檔
安裝LaTeX Suite
配置正向、反向搜尋
正向搜尋
在產生的dvi 檔案中尋找原始碼所對應元素
反向搜尋
在產生的dvi 檔案中尋找元素所對應原始碼的位置。
初學者關於<++> 的困惑
是LaTeX Suite 一項非常好用的功能
主要內容
VIM 簡介
VIM 入門
VIM 進階
VIM 使用小結
VIM 是非常強大而方便的文字編輯器
需要通過學習才能夠用好
學習付出的努力是值得的
不要報怨VIM 作為IDE 不夠強大
先想想自己為所謂“強大”的IDE 付了多少錢
開源社區的項目需要所有人為之付出勞動
謝謝大家!
感謝大家支援!
Q&A
Happy VIMming~~
#Step 3...
http://blog.csdn.net/iiprogram/archive/2006/03/14/624403.aspx
學習資源
VIM 網站
http://www.vim.org
http://vim.sourceforge.org
中文網站
水木社區VIM 版及版面附屬FTP
學習資源
VIM 郵件清單
vim-announce@vim.org
vim@vim.org
vim-dev@vim.org
vim-mac@vim.org
vim-multibyte@vim.org