* 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)
沒有留言:
張貼留言