vim 教學資源
vimtutor zh 進入 vim 中文教學文件
vim 冒險遊戲:初學者練習 vim 鍵盤的操作兼玩遊戲,很有趣喔!!
HOWTO - vi, vim:很棒的教學!
移動游標的方法
[ h ] [ j ] [ k ] [ l ]
[←] [ ↓ ] [ ↑ ] [→]
w 以一個單字字首向後移動
b 以一個單字字首向前移動
e 以一個單字字尾向後移動
0 = [Home] 移到該行的最前面
^ 移到該行的第一個字元
$ = [End] 移到該行的最後面
gg 移動到檔案最前面的第一個字元
G 移動到檔案最後面一行的第一個字元
% 在 () {} 上會移動到相對應的括號
f " 移到該行的下一個雙引號 (F反向)
n + [space] 向右移動 n 個
n + [Enter] 向下移動 n 行 = nG = nj = n↓ = :n
( 移到句子開頭的第一個字元=^
) 移到句子結尾的下一行
{ 移到上一個區塊的上一行
} 移到下一個區塊的下一行
[[ 移到上一個區塊的第一行
]] 移到下一個區塊的第一行
[Page Down] = [Ctrl] + [f] 下一頁
[Page Up] = [Ctrl] + [b] 上一頁
[Ctrl] + [e] 向下捲動一行
[Ctrl] + [y] 向上捲動一行
H 移動到該頁第一行
M 移動到該頁中間那一行
L 移動到該頁最後一行
zz 移動畫面置中游標 (ZZ 存檔並離開 = :wq = :x , ZQ 直接離開)
zb 移動畫面置底游標
zt 移動畫面置頂游標
標記
:marks 顯示所有標記
ma 標記mark a
'a 快速跳到標記mark a的那一行
' ' 回到剛剛的位置
:delma a 刪除標記a
搜尋
/word 游標之後開始找
n 搜尋下一個 ( * 游標所在單字搜尋下一個相同的單字)
N 搜尋上一個 ( # 游標所在單字搜尋上一個相同的單字)
?word 游標之前開始找
取代
:1,$s/word1/word2/g 從第一行到最後一行尋找word1字串取代為word2
:1,$s/word1/word2/gc 取代前提示使用者確認
:n,md n到m行刪除
剪下、複製與貼上
x = [del]
X = [backspace]
dd = D 剪下該列 (ndd)
dw 剪下目前游標後的單字
diw 剪下游標上的單字
cc = C = S 剪下該行後,進入insert模式
cw 剪下目前游標後的單字,進入insert模式
ciw 剪下游標上的單字,進入insert模式
ci' 剪下單引號內的字串,進入insert模式
yy = Y 複製該列 (nyy)
yw 複製目前游標後的單字
yiw 複製單字
yi' 複製單引號內的字串
"ayy 把複製的字串放到a索引裡 ( :reg指令,清空:let @a = ' ' )
"ap 游標後貼上a索引裡的內容
p 游標後貼上
P 游標前貼上
. 重複前一個動作
u 復原前一個動作
[Ctrl] + [r] 重做上一個動作
進入 insert 模式
A 游標移到行尾,進入 insert 模式
o 目前游標所在的下一行處插入新的一行
O 目前游標所在處的上一行插入新的一行
進入 replace 模式
r 取代游標所在的一個字元
R 會一直取代游標所在的文字,直到按下[ESC]為止
visual模式區塊選擇
[v] + [←↓↑→] 反白字元
[V] + [←↓↑→] 反白列visual line模式
[Ctrl] + [v] visual block模式
J 反白的列合併成同一列
> 反白的列全部向右縮排
< 反白的列全部向左縮排
vi" 反白""中的字串,不包括"
va" 反白""中的字串,包括"
y 反白的地方複製起來
d = x 反白的地方剪下
多檔案編輯
vim file1 file2
:n 編輯下一個檔案 =:bn
:N 編輯上一個檔案 =:bp
:b<索引編號> 切換到檔案的索引編號
[Ctrl] + [^] 目前的檔案與下一個檔案互相切換
:files = :ls = :buffers 列出目前 vim 開啟的所有檔案
:e Filename or Dir 開啟另一個檔案編輯,若是目錄的話,會開啟預設開啟netrw檔案瀏覽視窗
:bw 目前編輯的檔案從buffer中移除
:r <Filename> 讀一個檔案的內容,插入目前游標下方
:wa 全部檔案寫入
:qa 全部檔案離開
多分割視窗操作
vim -o file1 file2 上下分割視窗
vim -O file1 file2 左右分割視窗
:sp = [Ctrl] + [w] + [s] 上下分割視窗,以原檔案開啟
:new file = [Ctrl] + [w] + [n] 上下分割視窗,以新檔案開啟
:vs = [Ctrl] + [w] + [v] 左右分割視窗,以原檔案開啟
:vnew file 左右分割視窗,以新檔案開啟
[Ctrl] + [w] + [←↓↑→] 游標可移動任何的視窗
[Ctrl] + [w] + [p] 切換到上一個視窗
[Ctrl] + [w] + [w] 切換到下一個視窗
[Ctrl] + [w]+ [q] = [Ctrl] + [w]+ [c] = :q = :x
[Ctrl] + [w] + [o] = :only 留下目前視窗,其他關閉
[Ctrl] + [w] + [=] 平均視窗大小
[Ctrl] + [w] + [f] 以上下分割形式,開啟游標上的檔案或路徑
檔案瀏覽視窗
gf 開啟游標上的檔案或目錄,覆蓋目前編輯檔案
gF 開啟游標上的檔案或目錄,覆蓋目前編輯檔案
:Sex 以上下分割形式,開啟檔案瀏覽視窗
:Vex 以左右分割形式,開啟檔案瀏覽視窗
:Explore 開啟檔案瀏覽視窗
Tab視窗操作
vim -p file1 file2 用 tab 開啟檔案
:tab ball = :tabnew | b <索引編號> 把所有 buffer 轉成 tab 形式
:tabe = :tabnew file 開新 tab
:tabc = [Ctrl] + [w]+ [c] = :q 關閉 tab
:tabo 留下目前 tab,關閉其他
:tabn = gt 切換下一個 tab (ngt) = [Ctrl] + [page down]
:tabp = gT 切換上一個 tab = [Ctrl] + [page up]
:tabr 第一個標籤頁
:tabl 最後一個標籤頁
:tabm <n> 移動到第n個tab
:tabs 列出所有tab
:map <F5> :tabp<CR>
:map <F6> :tabn<CR>
:map ^T :tabnew .<CR>
:imap <F5> <ESC>:tabprevious<CR>i
:imap <F6> <ESC>:tabnext<CR>i
:imap ^T <ESC>:tabnew .<CR>i
指令
:w <filename> 另存新檔
:f <filename> 改目前編輯的檔名,儲存時另存新檔
:n1,n2 w <filename> 將 n1 到 n2 的內容儲存成 filename 這個檔案
:! command 暫時離開 vi 到指令列模式下,執行 command 的顯示結果
:!! 執行前一個指令
:r!ls 讀 ls 指令輸出到該檔內
:%!nl -ba 全部(包括非空白行)最前面加入行號
:sh 啟動一個shell,暫時離開vim,[Ctrl] + [d] =exit 返回vim
:so <file> (source)讀檔案中的指令並執行
排版
>> 向右縮排 (n>>)
<< 向左縮排 (n<<)
其他
vim –r <filename> 恢復編輯時被中斷的檔案 :recover
[Ctrl] + [n] = [Ctrl] + [p] 自動補齊檔案中已有的單字,詳細可參考這篇
[Ctrl] + [g] 顯示檔名、行號/總行數、瀏覽的百分比
K 查看當前程式函式庫man page
:TOhtml 該檔案傳換成HTML形式
vim 的環境設定參數
:opt 列出所有目前的設定,在 set 這個字上按 Enter 即可改變設定,改完後按 :q就可以了 (在簡短說明處按 Enter 則會叫出該部份的說明檔給您參考)
:h <cmd> 查 vim 指令說明文檔
:set <option>? 顯示 option 這設定的目前值
:set all 顯示目前所有的環境參數設定值。
:set 顯示有更動過的設定
:set no<option> 取消該設定
~/.vimrc
:syntax on "語法高亮度顯示
:set ai "(autoindent) 自動縮排
:filetype plugin indent on
:set nu "(number) 顯示行號
:set lbr "(linebreak) 在空白或標點符號處斷行,實際上沒有插入EOF
:set ts=4 "(tabstop) 設定一個tab等於四個空白長度
:set et "(expandtab) 將 tab鍵轉換成空白取代(由tabstop設定而定)
:set sw=4 "(shiftwidth) 縮排>>時,一次移動的字元寬度
:set sm "(showmatch) 自動找對應括號
:set sc "(showcmd) 在狀態欄顯示正在輸入的指令
:set hls "(hlsearch) 反白搜尋到的字串
:set is "(incsearch) 不需按 Enter,邊打邊搜尋
:set ru "(ruler)顯示說明
:set ls "(laststatus) 最下方顯示狀態列
:hi stl ctermbg=darkblue "(statusline)
:set smd "(showmode) 顯示目前vim模式
:set paste "直接貼上文字時格式不會跑掉
:set nobk "(nobackup)存檔時不要有xxx~備份檔
:set noswf "(swapfile) 編輯檔案時不會自動產生swp檔,但會消耗系統更多的記憶體(不建議)
:set fdm=syntax "(foldmethod)摺疊程式碼功能 (快捷鍵za)
:set fdl=99 "(foldlevel) 預設情況不摺疊程式碼
:set t_Co=256 "支援256色顯示
:set enc=utf8 "(encoding) 設定顯示的編碼
:set fencs=big5,utf-8,default "(fileencodings) 開啟時自動判斷檔案的編碼
:set fenc=utf-8 "(fileencoding)建檔和存檔時的編碼,若設定與enc不同時,以fenc為準。
:set ffs=unix,dos "(fileformats) 自動調整檔案的EOF斷行
:set hi=50 "(history)設定指令的歷史紀錄
:set mouse=a "讓vim支援滑鼠
:set wim=list:full "(wildmode)再輸入:指令時,按 [Tab] 列出所有符合的指令
:set wmnu "(wildmenu)
vim 退格键(backspace)不能用,引用這篇
set nocp "(nocompatible) 取消vi相容模式
set backspace=indent,eol,start
vim 開啟 Binary file
vim -b <filename> 防止檔案最後加上EOL 或 set bin (binary)也可以
%!xxd 轉換成Hex的形式顯示
%!xxd -r 轉換回Binary的形式顯示
ga 游標處字元的編碼顯示10,16,8進制
使 vim 與系統剪貼簿互相複製、貼上,引用這篇
sudo apt-get install vim-gnome
"+y 複製到系統剪貼簿
"+p 系統剪貼簿複製到VIM
讓系統所有使用者共享 vimrc 設定檔
/usr/share/vim/vimrc
或
/etc/vim/vimrc.local
更改系統預設編輯器,引用這篇
update-alternatives --config editor
putty 環境下,使 vim 可以使用 numlock 的按鍵,參考這篇
開啟vim時,自動恢復上次vim的工作環境,參考這篇
最後分享一個vim速查卡
參考網址:
1. 鳥哥的 Linux 私房菜-第十章、vim 程式編輯器
4. 简明 Vim 练级攻略