* What is Vi
* Vi 是一個文字編輯器 (plain text editor)
* Vi = "Vi"sual Editor
* Vi 是 POSIX 定義的標準編輯器,Emacs 則不是。
* Vim = "Vi"sual editor i"m"proved,是 vi 的加強版
* Vi 加強版有 Vim, Nvi, Elvis, Vile 等
* Nvi 最接近 Vi,BSD 內建的 Vi 即 Nvi
* Gvim = GUI version of Vim 是 Vim for Windows 的 Porting
* Why Vim
* Vim 是最多人用的 Vi 加強版,功能也最多。
* Vim 是完全免費的,是 FreeWare 也是 CharityWare(慈善軟體)。
* 支援各式主流平台,如 Unix, BSD, Linux, DOS/Windows, Mac 等等。
* 中文編碼支援完善。
* 自定功能強大,也有許多現成的 Scripts 可以用。
* Where to get
下載:
------------
# 可以到以下這幾個站點 Download 各平台的 Porting。
http://www.vim.org/download.php
http://vim.sourceforge.net/download.php
ftp://ftp.vim.org/pub/vim/
* Color Scheme
設定配色:
------------
:colorscheme darkblue
# 配色檔在 /usr/share/vim/vim71/colors 下面。
測試配色:
------------
:so $VIMRUNTIME/syntax/hitest.vim
* 基本操作
輸入模式:
------------
a 在游標的前一字元進入輸入模式 (append)
i 在游標的後一字元進入輸入模式 (insert)
o 在游標的下一行插入新行並進入輸入模式
O 在游標的上一行插入新行並進入輸入模式
移動:
------------
h 上
j 下
k 上
l 右
移動速記圖示:
------------
+-------+
| k |
| h l |
| j |
+-------+
字與行移動:
------------
0 移到行首
^ 移到該行第一個非白字的的字元
$ 移到行尾
w 移到後一字首 (word)
e 移到後一字尾 (end of word)
b 移到前一字首 (before word)
Note: 移到行首行尾的 ^ 和 $ 用 Regular Expression.
頁與檔移動:
------------
Ctrl-f 向下一頁 (forward)
Ctrl-b 向上移一頁 (back)
1G, gg 移到檔首 (go)
[n]G 移到第 n 行 (number go)
G 移到檔尾
M 移到營幕中間 (middle)
H 移到營幕開頭 (head)
刪除:
------------
x 刪除該字元
X 刪除該字元前一字
D, d$ 刪至行尾
dd 刪除整行
[n]D, d[n]d 刪除 n 行
複製:
------------
y{字元} 複製 (yank)
yy 複製整行
[n]Y, y[n]y 複製 n 行
p 貼上 (put)
:reg 查看複製暫存區 (register)
其他:
------------
u 回上一動 (undo)
J 合併下一行 (join)
gJ 合併下一行但不加空白
檔案:
------------
:q 結束 (quit)
:q! 強制結束不儲存
:x 有修改時才儲存並結束
:w 儲存 (write)
:wq 儲存並結束
ZZ 等於 :q!
ZQ 等於 :x
C語言程式:
----------------
[[ 尋找上一個 function
]] 尋找下一個 function
% 尋找對應的 bracer
視窗:
------------
:split [file] 分割視窗(有加檔名時開啟檔案為新視窗 )
:new 開新檔視窗
:close 關畢現行視窗
:only 只留下現行視窗
:vsplit [file] 分割為垂直視窗
:vnew 開新檔垂直視窗
:qall 結束全部
:wall 寫入全部
:wqall 寫入並結束全部
:qall! 結束全部不詢問
Note: vim [-o|-O] one.txt two.txt three.txt (-o 水平, -O 垂直)
CTRL-w o 同 :only
CTRL-w c 同 :close
CTRL-w s 同 :split
CTRL-w n 同 :new
Ctrl-w w 循環切換視窗
CTRL-W h 切換到左邊那個視窗
CTRL-W j 切換到下面那個視窗
CTRL-W k 切換到上面那個視窗
CTRL-W l 切換到右邊那個視窗
CTRL-W t 切換到第一個視窗
CTRL-W b 切換到最後個視窗
CTRL-W H 把現行視窗設到左邊
CTRL-W J 把現行視窗設到下面
Ctrl-w K 把現行視窗設到上面
CTRL-W L 把現行視窗設到右邊
Ctrl-w + 增大視窗(一行)
Ctrl-w - 縮小視窗
分頁(tab browsing):
------------
:tabedit [file]
:tab split [file]
:tab new
:tabo[nly]
:tabc[lose]
:tabn[ext]
:tabp[revious]
:tabfir[st]
:tabl[ast]
:tabr[rewind]
:tabs
ctrl + pageup 上一分頁
ctrl + pagedown 下一分頁
書籤:
------------
m[a-z][A-Z] 設定書籤 (mark)
'[a-z][A-Z] 跳到書籤
搜尋:
------------
/[regular expression pattern] 往下尋找
?[regular expression pattern] 往上尋找(與 / 相反)
n 跳至下一個符合
N 跳至上一個符合
:set ignorecase 搜尋忽略大小寫
:set ic 同上
:set noignorecase 搜尋不忽略大小寫
:set noic 同上
搜尋取代:
------------
%s/[RE pattern]/[to replace string]/
* 可以加 modifier 如 g 表示替換全部 (global)
* Visual Mode
操作方式:
------------
1. 按 v, V 或 Ctrl-v 進入 Visual Mode。
2. 按 hjkl 或方向鍵標記。
3. 按操作鍵如 y, d, v 等等...
基本指令:
------------
v 字元選取
V 行選取
Ctrl-v 區塊選取
gv 最後一次選取
結束 Visual Mode
Ctrl-C 結束 Visual Mode
o 到區塊開頭
O 到區塊結尾
~ 切換大小寫
d, x 刪除
r 修改 (填滿為某字)
c 修改
y 複製
> 左平移(4)
< 右平移(4)
* 排版相關:
整行平移
--------
>> 整行向右移一個 shiftwidth
<< 整行向左移一個 shiftwidth
設定平移單位
------------
* shiftwidth 簡寫為 sw,如 :set sw?
:set shiftwidth? 得知目前的設定值
:set shiftwidth=4 設定 shiftwidth = 4 個字元
文字對齊
--------
:ce(nter) 整行以 textwidth 為基準置中
:ri(ght) 整行以 textwidth 為基準靠右
:le(ft) 整行以 textwidth 為基準靠左
設定行寬
--------
* textwidth 簡寫為 tw,試試 :set tw?
:set textwidth=80 設定 textwidth
排版指令
--------
* gq 是只有 vim 才提供的指令
gq 重排 visual mode 標記起來的部份
gqq 本行重排
gqap 整段重排(或 gqip)
gqG 全文重排(游標所在處的段落開始重排至檔尾)
排版指令變化形
--------------
gq3q 重排三行
gq6ap 重排六個段落
gq9j 重排九行
中文相容
--------
李果正前輩(http://info.sayya.org/~edt1023/)
有提到一個與中文相容的 macro:
http://info.sayya.org/~edt1023/vim/format.vim
* 設定檔
Unix:
~/.vimrc
--------
Windows:
[GVIM安裝目錄]\_vimrc
---------------------
"加強 vim 但某部份會與 vi 不相容
set nocompatible
"自動縮排
"set cindent
"set autoindent
"set smartindent
"顯示 bracer 配對
set showmatch
set foldmethod=marker
"檔案編碼
set fileencodings=utf-8,big5
set fileencoding=big5
"終端機編碼
if has("gui_running")
set termencoding=utf-8
else
set termencoding=big5
endif
"換行字元
set fileformats=unix,dos
set fileformat=unix
"行號
set number
set numberwidth=3
"尺標
set ruler
"備份
set history=100
"set backup
"set backupdir=~/.bak
"set backupdir=D:\bak
"tab 定位鍵設定,每次跳四格,
set softtabstop=4
set shiftwidth=4
set tabstop=4
"空白取代tab碼
set expandtab
"開啟語法高亮
syntax on
"搜尋關鍵字高亮
set hlsearch
"搜尋不分大小寫
set ignorecase
"配色方案
" blue darkblue default delek desert elflord evening koehler morning
" murphy pablo peachpuff ron shine slate torte zellner
colorscheme darkblue
"狀態列
set statusline=%F%m%r%h%w\ [%{&ff}]\ [%Y]\ LEN[%L]\ [%3p%%]\ LOC[%l,%v]%=ASC[%03b]\ HEX[%02B]
set laststatus=2
"顯示游標行
set cursorline
highlight CursorLine guibg=#000033 ctermbg=black
"色彩設定
highlight Comment guifg=cyan ctermfg=cyan
highlight Search term=reverse guibg=darkmagenta guifg=white ctermbg=darkmagenta ctermfg=white
highlight Normal guibg=black guifg=gray ctermbg=black ctermfg=gray
highlight Visual gui=reverse guifg=blue guibg=white
highlight VisualNOS gui=reverse,underline guifg=blue guibg=white
""_gvimrc (以下設定為 Windows 版本專用)
""------------
"啟動後最大化視窗
set lines=999999
set columns=999999
"字型 font=Dina, size=10 (Dina 是自己抓的字型檔)
"set guifont=Dina:h10
"字型 font=Courier New, size=11
"set guifont=Courier_New:h11 "版本 7.1 以後的空白改成 underline
"set guifont=Courier New:h11 "for Version 7.1
"字型 font=Consolas, size=12
set guifont=Consolas:h12
"tab browsing 設定
set tabpagemax=15
"set showtabline=2
"修改 key-mapping 讓 vim7 的 tab browsing 功能更好用
"map -> normal mode
"imap -> insert mode
"vmap -> visual mode
"lmap -> line mode
"VIM7 預設是
"仿 UltraEdit 可設成
"用終端機跑 VIM 可以設成
"Ctrl-DOWN goes to next tab
map <c-down> :tabnext
imap <c-down> :tabnext
vmap <c-down> :tabnext
"Ctrl-UP goes to previous tab
imap <c-up> :tabprev
map <c-up> :tabprev
vmap <c-up> :tabprev
"Ctrl-t makes a new tab
" Ctrl-t 原本是用來跳回標簽的
"vmap <c-t> :tabnew
"imap <c-t> :tabnew
"map <c-t> :tabnew
"Ctrl-x closes the tab
map <c-x> :tabclose
imap <c-x> :tabclose
vmap <c-x> :tabclose
* 小技巧
tab 很好用,但是每次要手工打開 tab 很麻煩,使用下面的命令就可以在當前 vim 裡開啟新的 tab。
"C:\Program Files\Vim\vim71\gvim.exe" -p --remote-tab-silent "%1" "%*"
Total Commander 的 external editor 設定:
C:\Program Files\Vim\vim71\gvim.exe -p --remote-tab-silent
如果一次開啟多個檔案如 vim a.c b.c 時,會開成 buffer,可用 :tab ball 轉成 tabs。
搜尋忽略大小寫的方法:
:set ignorecase 或 :set ic
不忽略大小寫:
:set noignorecase 或 :set noic
在 terminal 中輸入 ^M 的方法:
如把 DOS 的 CR(0x0d) 移除的指令 :%s/^M//g
這個 ^M 按 ctrl+v ctrl+m
其實也可以用 :%s/\r//g
星期二, 2月 19, 2008
VIM Notes
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言